Nestjs的HttpModule模块打包了Axios并且暴露出HttpService接口,HttpService将Axios数据转换为Obervable并返回比如,HttpService的Post方法在Nestjs源码中是这样写的,今天小编就来聊一聊关于nest编程语言?接下来我们就一起去研究一下吧!

nest编程语言(Nestjs发送x-www-form-urlencoded风格的请求)

nest编程语言

Nestjs的Http模块

Nestjs的HttpModule模块打包了Axios并且暴露出HttpService接口,HttpService将Axios数据转换为Obervable并返回。比如,HttpService的Post方法在Nestjs源码中是这样写的。

post<T = any>( url: string, data?: any, config?: AxiosRequestConfig, ): Observable<AxiosResponse<T>> { return defer(() => this.instance.post(url, data, config)); }

默认情况下,HttpService发送的是JSON风格的请求,但是我们难免要和一些x-www-form-urlencoded风格的API打交道(我是在使用墨迹天气的API时遇到这个坑的)。因为Nestjs仅仅是对Axios进行了封装,因此要到Axios中找答案。

Axios官方说明

在Axois官方文档中对使用x-www-form-urlencoded format风格针对浏览器和node环境分别做了如下说明。

NestJs中的使用

按照Axios官方文档的推荐,使用qs库,由于qs在axios中封装,而Nestjs封装了Axois,因此不需要额外安装Axios或者qs就能直接使用。以墨迹天气的API接口为例,token和APPCODE需要换成相应内容即可正常使用。

import { Injectable, HttpService, Header } from '@nestjs/common'; import { map } from 'rxjs/operators'; import * as qs from 'qs'; @Injectable() export class WeatherService { constructor(private httpService: HttpService) {} getWeatherId(id) { const data = { cityId: id,token:**************** }; return this.httpService .post( 'http://aliv18.data.moji.com/whapi/json/alicityweather/forecast15days', qs.stringify(data), { headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8', Authorization: 'APPCODE *******************', }, }, ) .pipe(map(response => response.data)); // return this.httpService(options).pipe( // map(response=>response.data) // ); }

,