如何在LoopBack 4中通过Rest连接器获取Response Header响应头
LoopBack 4 调用外部API获取响应头方案
LB4 默认调用外部接口时仅返回响应体内容,要获取响应头可根据你的调用方式选择对应修改方案:
1. 使用官方REST服务代理调用(@serviceProxy注入)
默认的服务代理仅返回响应体,你需要在调用时传入includeHeaders参数开启全响应返回:
- 首先修改服务接口定义,适配返回结构:
// 原有服务接口定义 interface ExternalApiService { getInfo(params: Record<string, any>): Promise<InfoBody>; } // 修改后支持返回头的定义 interface ExternalApiService { getInfo( params: Record<string, any>, options?: { includeHeaders: boolean } ): Promise<{ data: InfoBody, headers: Record<string, string | string[] | undefined> }>; }
- 调用时传入参数即可获取响应头:
@serviceProxy(ExternalApiService) private externalApi: ExternalApiService; async test() { const result = await this.externalApi.getInfo({id: 1}, {includeHeaders: true}); // 读取响应头 const customHeader = result.headers['x-custom-header']; // 读取原有响应体 const body = result.data; }
2. 自行封装axios调用
LB4 底层REST客户端基于axios实现,如果你是直接用axios发起请求,默认返回的响应对象本身就包含headers字段,直接读取即可:
import axios from 'axios'; async test() { const response = await axios.post('https://external-api.com/xxx', {param: 1}); // 读取响应头 const customHeader = response.headers['x-custom-header']; // 读取响应体 const body = response.data; }
3. 全局配置默认返回响应头
如果你需要该服务下所有接口调用都默认返回响应头,可以在绑定服务时自定义响应转换器:
// 在application.ts中绑定服务时添加配置 this.bind('services.ExternalApiService').toDynamicValue((ctx) => { return new RestServiceClient( ctx.getSync(RestTemplateBindings.REST_TEMPLATE), { baseUrl: 'https://external-api.com', // 自定义响应转换器,默认返回头+体的组合结构 responseConverter: (res) => { return { data: res.data, headers: res.headers } } } ) }).asClass(ExternalApiService);
注意事项
- 响应头的字段名会被自动转为小写,读取时请用小写格式匹配字段名
- 浏览器跨域场景下,自定义响应头需要外部API配置
Access-Control-Expose-Headers暴露对应的头字段,否则前端无法读取,服务端调用不受该限制
内容的提问来源于stack exchange,提问作者Girish
相关产品推荐
相关产品推荐

