如何使用@nestjs/axios 发出 api Get 请求
Posted
技术标签:
【中文标题】如何使用@nestjs/axios 发出 api Get 请求【英文标题】:How to make an api Get request using @nestjs/axios 【发布时间】:2022-01-23 18:39:32 【问题描述】:我想从 OpenWeatherMap 获取一个城市的天气信息,但我得到一个奇怪的 JSON 响应
回复我收到的
“名称”:“达拉斯”, “天气”: “资源”: “资源”: , "_id": "61c335daeb8c6b030489996b", “__v”:0
cities.service.ts
@Injectable()
export class CitiesService
constructor(
@InjectModel('City') private readonly cityModel: Model<City>,
private readonly httpService: HttpService
)
async createCity(createCityDto: CreateCityDto)
const name = createCityDto;
// Get city weather from OpenWeatherMap
const weather = await this.httpService
.get(
`api.openweathermap.org/data/2.5/weather?q=$name&appid=$process.env.OPEN_WEATHER_API_KEY`,
)
.pipe(
map((response) => response.data),
map((data) => data),
);
console.log(weather);
const city = new this.cityModel(
name,
weather,
);
await city.save();
return city;
【问题讨论】:
【参考方案1】:@nestjs/axios
将所有 HTTP 调用包装在 RxJS Observables 中,这有点像增压回调。一旦你打开了一个 observable 流,你要么只需要在这个流中工作(使用 .pipe
和你开始映射数据时的操作符),要么你需要将 Observable 转换为一个 Promise。最简单的方法是使用lastValueFrom
并用它包裹整个 Observbale (lastValueFrom(this.http.get().pipe())
)。如果你选择前者,tap
和 switchMap
可能也是两个运营商要掌握的窍门,否则 lastValueFrom
方法可以将 await
ed 作为正常的承诺。
【讨论】:
非常感谢!以上是关于如何使用@nestjs/axios 发出 api Get 请求的主要内容,如果未能解决你的问题,请参考以下文章
如何使用严格类型的有效负载发出事件? | Vue 3 组合 API + TypeScript
使用过期令牌发出同时 API 请求时如何避免多个令牌刷新请求