You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 22:45:32