【发布时间】:2021-06-22 04:04:37
【问题描述】:
这是我第一次发帖。
我有以下功能:
export function sendRequest<T>(req: RawRequest, options) {
const start = Date.now();
const reqOptions: CoreOptions = {
headers: {...req.headers, ['Content-type']: 'application/json'},
body: req.body,ִ
};
if (options.ignoreCertError) {
process.env["NODE_TLS_REJECT_UNAUTHORIZED"] = 0 as any;
}
if (options.proxy) {
reqOptions.proxy = options.proxy;
reqOptions.tunnel = false;
}
return new Promise<T>((resolve, reject) => request[req.method](
req.uri, reqOptions, (error: any, response: Response, body: any) => {
if (error) {
reject({
errorCode: error.errno ?? 'unknown',
errorDetails: error.syscall == 'getaddrinfo' ? 'missing vpn connection?' : error,
});
return;
}
try {
resolve(JSON.parse(body));
} catch (ex) {
reject({error: ex, body});
}
}));
}
如您所见,当这个 Promise 解决时,我会从请求的响应中返回正文。
但是,我需要以某种方式访问完整的响应,以便可以访问标头。
我无法更改此功能 - 项目中的所有 API 调用都使用它
我需要访问响应的函数:
await <my API endpoint that uses the above function>.get({
<my params>
}).then((res) => {
// get the response
// get the headers
return result = <something I need from the headers>
});
我希望这是有道理的,有人可以帮助我吗?
【问题讨论】:
-
显然,你不能。要么重新设计
sendRequest,要么创建一个新函数来返回完整的响应,而不仅仅是它的主体(并重写sendRequest作为新的代理)。
标签: javascript node.js typescript promise response