如何从NestJS的AxiosResponse-Observable中获取请求头?
在NestJS中获取Axios HEAD/GET请求的响应头
我在使用NestJS时,通过HttpService发起HEAD请求,返回的是Observable<AxiosResponse>类型的数据,请问怎么从中获取响应头?
示例请求代码:
import { HttpService } from '@nestjs/axios'; const observable = this.httpService.head(uri);
方案一:基于NestJS HttpService(Axios Observable)处理
HttpService返回的Observable包装了完整的AxiosResponse对象,响应头信息就包含在这个对象里,你可以通过两种方式获取:
1. 直接订阅Observable
通过订阅Observable的next回调,就能拿到响应对象,响应头存在response.headers中:
import { HttpService } from '@nestjs/axios'; import { AxiosResponse } from 'axios'; this.httpService.head(uri).subscribe({ next: (response: AxiosResponse) => { console.log('响应头:', response.headers); // 这里可以直接使用响应头做后续处理 }, error: (err) => { console.error('请求失败:', err); }, });
2. 转换为Promise适配async/await
如果习惯用异步语法,用RxJS的lastValueFrom或firstValueFrom把Observable转为Promise,就能用async/await处理:
import { HttpService } from '@nestjs/axios'; import { lastValueFrom } from 'rxjs'; import { AxiosResponse } from 'axios'; async function fetchHeaders() { try { const response: AxiosResponse = await lastValueFrom(this.httpService.head(uri)); console.log('响应头:', response.headers); return response.headers; } catch (err) { console.error('请求出错:', err); } }
方案二:使用Node.js原生https库(你找到的简便方案)
直接用Node.js内置的https模块发起请求,回调里能直接拿到响应头。注意原代码的await需要包裹在Promise中,才能配合async/await使用:
import http from "https"; async function getHeadersWithHttps() { return new Promise((resolve, reject) => { http.request(uri, { method: 'HEAD' }, (res) => { console.log(res.headers); resolve(res.headers); }).on('error', (err) => { console.error(err); reject(err); }).end(); }); }
内容的提问来源于stack exchange,提问作者coding_kills_me
相关产品推荐
相关产品推荐

