美文网首页
node req.pipe 502

node req.pipe 502

作者: 何喜同学 | 来源:发表于2019-06-24 15:58 被阅读0次

心血来潮,在旧项目的node中加入了node接口,发现在 app.post() 中接收不到页面传递的body 参数。
发现是新版的 express 需要引入 body-parser 模块才能正常接收参数。

  const bodyParser = require('body-parser');
  app.use(bodyParser.json());
  app.use(bodyParser.urlencoded({ extended: false }));

这样是确实可以自己愉快的写接口,感觉自己棒棒哒!
但是项目上线之后,发现以前的页面写的ajax 请求全部报 502 。作为一名前端,我的第一感觉就是后端同事的服务器挂了········
此刻后端同事失联,只能自己找问题。
于是马上回滚线上代码,结果以前的页面可以用了。 “啪啪啪啪···,脸好痛”!
那么问题在哪儿呢?

其实node 部分的代码逻辑没有问题,问题在于,以前的API接口,都写了一个代理转发

router.post('/api/*', function (req, res) {
  var url = 'http://xxx.xxx.com' + req.url;
  req.pipe(request(url)).pipe(res);
})

看出来问题了吗?
没有!是的,我第2次都没看出有问题。问题在于 request()

从后端调试发现node转发post过来的body体为空。说明应该是有动作已经读取了请求的输入流,因为请求的输入流只能读取一次。
body-parser用于body体的解析,因此其自动读取了请求输入流导致浏览器请求被pipe到后端后,后端读取的body体为空。

所以解决办法就是将一下代码放在 req.pipe之后,问题解决。

  app.use(bodyParser.json());
  app.use(bodyParser.urlencoded({ extended: false }));

相关文章

  • node req.pipe 502

    心血来潮,在旧项目的node中加入了node接口,发现在 app.post() 中接收不到页面传递的body 参数...

  • vps上的node.js博客返回502

    vps上的node.js博客返回502 vps上的node.js博客返回502 摘要 将程序以守护进程的方式启动:...

  • Mac 10.11.6 + 502

    各种502报错502 Bad Gateway 502 https://blog.csdn.net/m0_37482...

  • 编译的时候jcenter仓库出现502错误

    编译的时候jcenter仓库出现502错误 打开url果然502, 出现这个502错误,是因为jcenter仓库自...

  • 聊聊nginx与tomcat的5xx

    序 本文主要讲述一下nginx与tomcat的502、504、503错误及其常见的产生原因。 502 定义 502...

  • CDN 502错误

    502错误,百度百科上的解释 中文名 502 外文名 502 Bad Gateway 属性 网关/代理 意义 无响...

  • 502

    .

  • 502

  • 502

    想起我在学校吃的第一顿饭第一次迷路第一次遇见你们 第一天晚上太热和孟孟睡的地铺我俩吵吵着要买这个买那个,她是我来到...

  • 502

    彩铅 心头好啊心头好~

网友评论

      本文标题:node req.pipe 502

      本文链接:https://www.haomeiwen.com/subject/hbloqctx.html