我正在尝试将Express请求直接传递到Axios请求中。尽管必须修改请求的标头,即Authorization
和Cookie
标头,但我将此端点更多地用作代理或中继。我也以不必使用任何磁盘空间或RAM空间的方式进行中继。我之前曾问过a question like this,但那是我要转而来的request-promise
。当我替换变量时,代码不起作用,因此它实际上不起作用。到目前为止,我有这个:
app.get('/', async (req, res) => {
await axios({
method: 'post',
url: 'https://example.com/json_upload',
responseType: "stream",
headers: {
'Authorization': 'Bearer ' + req.params["fileHash"]
}
}).then((res) => {
req.pipe(res.data);
});
});
如您所见,Express请求参数“ fileHash”用于Bearer令牌,并且我尝试将请求传递到Axios,但这不起作用,并且出现以下错误:
TypeError: dest.end is not a function
at IncomingMessage.onend (_stream_readable.js:671:10)
at Object.onceWrapper (events.js:286:20)
at IncomingMessage.emit (events.js:203:15)
at endReadableNT (_stream_readable.js:1145:12)
at process._tickCallback (internal/process/next_tick.js:63:19)
我尝试过将其切换并使用响应将数据传递给数据,但这意味着我不会将请求主体流式传输到Axios请求。我还没有找到其他解决方案。任何帮助将不胜感激。
答案 0 :(得分:0)
您需要执行axiosResponse.data.pipe(res);
。另外,您可以在使用async/await
时删除.then
。
app.get('/', (req, res) => {
axios({
method: 'post',
url: 'https://example.com/json_upload',
responseType: "stream",
headers: {
'Authorization': 'Bearer ' + req.params["fileHash"]
}
}).then((axiosResponse) => {
axiosResponse.data.pipe(res);
});
});