【问题标题】:why req.body is undefined in 'proxyRes'为什么 req.body 在“proxyRes”中未定义
【发布时间】:2017-09-13 09:41:35
【问题描述】:

下面是我的代码

import { createProxyServer } from 'http-proxy';
import BodyParser from 'body-parser';

const jsonParser = BodyParser.json();
const proxy = createProxyServer({
  target: 'http://127.0.0.1:7800',
  proxyTimeout: 1000,
});

app.use('/api', (req, res) => {
  proxy.web(req, res);
});

proxy.on('proxyRes', (proxyRes, req, res) => {

  proxyRes.on('data', (dataBuffer) => {
    console.log('req.body ', req.body);
    const data = dataBuffer.toString('utf8');
    console.log(data);
  });

});

我将 req.body 设为未定义

如果我在app.post(..) 中使用中间件jsonParser,则此路由会挂起,并且我会在前端收到超时错误。代码如下。

app.use('/api', jsonParser, (req, res) => {
  proxy.web(req, res);
});

我想记录res.statusCode !== 200时的响应和请求

【问题讨论】:

  • 请修复您的代码中的一些问题,如果问题仍然存在,请告诉我们。首先删除导致语法错误的额外}。还要删除重复的行const jsonParser = BodyParser.json(); target 选项需要知道它的协议所以尝试:http://127.0.0.1:7800 即使这工作正常,你的代码在 req.body 不会存在的上下文中
  • @DanielAristizabal 谢谢,我已经修复了语法。

标签: javascript node.js express body-parser node-http-proxy


【解决方案1】:

在对代码进行了一些清理之后(删除 } 额外,删除重复行),我能够获得一些可运行的代码,但不确定这是否是您要找的。我希望这会有所帮助。

const proxy = createProxyServer({
  target: 'http://127.0.0.1:7800',
  proxyTimeout: 1000,
});

app.use(BodyParser())

app.use('/api', (req, res) => {
  proxy.on('proxyRes', (proxyRes) => {
    proxyRes.on('data', (dataBuffer) => {
      console.log('req.body ', req.body);
      const data = dataBuffer.toString('utf8');
      console.log(data);
    });
  });
  proxy.web(req, res);
});

【讨论】:

  • 感谢 Daniel,但上面的代码给出了相同的输出(未定义),并且 app.use(BodyParse()) 实际上挂起路由 - 前端的所有 api 都超时
  • 我认为问题可能是版本不匹配。检查 express 和使用的 body 解析插件之间的版本兼容性,由于没有在中间件链中调用 next() 导致挂起。仔细检查正文解析插件的文档可能应该以不同的方式调用它。如果您向 /api 发布数据,则应在 req.body 上显示代理响应,并在 data 上显示代理响应。
猜你喜欢
  • 2022-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-19
  • 1970-01-01
  • 2021-02-16
  • 2019-06-25
  • 2012-02-28
相关资源
最近更新 更多