将Express请求传递到Axios POST请求

时间:2020-03-04 12:43:03

标签: javascript node.js express axios node-streams

我正在尝试将Express请求直接传递到Axios请求中。尽管必须修改请求的标头,即AuthorizationCookie标头,但我将此端点更多地用作代理或中继。我也以不必使用任何磁盘空间或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请求。我还没有找到其他解决方案。任何帮助将不胜感激。

1 个答案:

答案 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);
    });
});