Node.js Loopback调用外部API后如何获取响应头?
解决LoopBack中获取REST服务响应头的问题
从你的代码来看,问题核心在于LoopBack的REST Connector默认仅返回响应体(body),不会包含响应头、状态码这类元信息。要拿到完整的响应内容,只需按以下步骤调整:
1. 修改数据源配置,启用完整响应返回
在你的数据源operations配置里,给对应的请求模板添加returnFullResponse: true,这样Connector会返回包含body、headers、status等字段的完整响应对象:
"operations": [ { "template": { "method": "GET", "url": "https://<some url>", "headers": { "x-csrf-token": "fetch" }, "returnFullResponse": true // 新增这一行,开启完整响应返回 }, "functions": { "getToken": [] } } ]
2. 优化服务接口定义(可选但推荐)
为了保证类型安全,建议更新S4hanapurreqService接口,明确返回值的结构:
export interface S4hanapurreqService { getToken(): Promise<{ body: any; headers: Record<string, string | string[]>; status: number; }>; }
注:部分响应头可能存在多值情况(如Set-Cookie),所以类型定义为string | string[]更严谨。
3. 在控制器中正确获取响应头和状态码
现在调用getToken()就能拿到完整响应了,另外要注意你之前的拼写错误:x-crsf-token应该是x-csrf-token,这也是你获取失败的关键原因之一。调整后的控制器代码:
@get('/getToken') async getToken(): Promise<any> { const fullResponse = await this.s4hanapurreqService.getToken(); // 获取HTTP状态码 const statusCode = fullResponse.status; // 安全获取x-csrf-token(兼容多值header的情况) const csrfToken = Array.isArray(fullResponse.headers['x-csrf-token']) ? fullResponse.headers['x-csrf-token'][0] : fullResponse.headers['x-csrf-token']; // 按需返回结果,比如返回token、状态码和响应体 return { csrfToken, statusCode, responseBody: fullResponse.body }; }
额外提示
- 如果你的LoopBack版本是3.x,配置方式略有差异,需要在
functions的参数列表中指定returnFullResponse,但从你的代码风格判断应该是4.x版本,上述配置完全适用。 - 可以先通过Postman或curl测试目标接口,确认
x-csrf-token响应头确实存在,避免因上游服务未返回导致的获取失败。
内容的提问来源于stack exchange,提问作者Diego Cantú
相关产品推荐
相关产品推荐

