Как ОПУБЛИКОВАТЬ данные формы с помощью HttpModule в NestJS

#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;
        }
    }