#post #axios #nestjs #mern #httpmodule
#Публикация #axios #nestjs #мерн #httpmodule
Вопрос:
Я пытаюсь получить токен доступа из API Instagram. Я хочу отправить тело в виде данных формы. Это мой код. это не работает. но это отлично работает в postman.
async getAccessTokenByCode(code: string): Promise<string> {
const baseUrl = config.get('authorize.baseUrl');
const clientId = config.get('basic.clientId');
const clientSecret = config.get('basic.clientSecret');
const grantType = config.get('basic.grant_type');
const redirectUri = config.get('basic.redirect_uri');
const url = `${baseUrl}/oauth/access_token`
const form = new FormData();
form.append('client_id', clientId);
form.append('client_secret', clientSecret);
form.append('grant_type', grantType);
form.append('redirect_uri', redirectUri);
form.append('code', code);
try {
const response = await this.httpService.post(url, { data: form }, { headers: form.getHeaders() }).toPromise();
return response.data;
} catch (error) {
console.log(error);
}
}
Как правильно отправлять данные post с помощью NestJS HttpModule??
Ответ №1:
Вот мой рабочий код:
async getAuthToken() {
const url = this.configService.get<string>('AUTHTOKEN_URL');
var bodyFormData = new FormData();
bodyFormData.append('SCOPE', this.configService.get<string>('SCOPE'));
bodyFormData.append('EMAIL_ID', this.configService.get<string>('EMAIL_ID'));
bodyFormData.append('PASSWORD', this.configService.get<string>('PASSWORD'));
const response = await this.httpService.post(
url,
bodyFormData,
{ headers: bodyFormData.getHeaders() }
).toPromise();
console.log(response.data);
return response.data;
}
Второй аргумент — это не json, а просто данные в вашем случае
Комментарии:
1. Не забудьте импортировать пакет данных формы: импортируйте FormData из ‘form-data’; npmjs.com/package/form-data
Ответ №2:
Мне пришлось форматировать данные вручную. Я не уверен, как правильно это сделать в NestJS. Я не нашел, например, такого модуля, как qs, который я бы использовал в NodeJS.
const data = `client_id=${clientId}amp;client_secret=${clientSecret}amp;grant_type=${grantType}amp;redirect_uri=${redirectUri}amp;code=${code}`;
Ответ №3:
Это сработало для меня.
async getToken() {
try {
const url = `https://login.microsoftonline.com/${this.azAdTenant}/oauth2/token`;
const formFlat = `grant_type=client_credentialsamp;client_id=${this.azAdClientId}amp;client_secret=${this.azAdClientSecret}amp;resource=${this.simpleStorageResource}`;
const response = await this.http.request({
baseURL: url,
method: "POST",
data: formFlat,
headers: {'content-type': 'application/x-www-form-urlencoded'},
}
).toPromise();
return response.data;
} catch (e) {
return e;
}
}