【问题标题】:Pass Express request onto Axios POST request将 Express 请求传递给 Axios POST 请求
【发布时间】:2020-06-16 23:09:36
【问题描述】:

我正在尝试将 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 请求。我还没有找到任何其他解决方案。任何帮助将不胜感激。

【问题讨论】:

  • 我的回答是否帮助您解决了问题?
  • 它确实可以转发响应,但我还必须转发存储在请求正文中的数据。我忘了在问题中添加这个。道歉。

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


【解决方案1】:

你需要做axiosResponse.data.pipe(res);。此外,您可以在使用 .then 时删除 async/await

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

【讨论】:

    猜你喜欢
    • 2017-12-08
    • 2021-08-30
    • 2017-11-20
    • 1970-01-01
    • 2016-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-13
    相关资源
    最近更新 更多