Express:单个路径上的rawBody / buffer

时间:2017-09-08 16:32:38

标签: javascript node.js express body-parser

我需要为POST请求获取rawBody(缓冲区),但我只需要在我的应用程序中的单个路径上执行此操作。

目前,我在我的主app.js中使用以下内容:

app.use(bodyParser.json({ verify: function(req, res, buf) { req.rawBody = buf; }}));

这可行,但它正在为每个路由发送缓冲区。这是不可取的,因为它为我的应用程序中的每个请求使用两倍的RAM。

如何在我需要的单一路线上获取rawBody?

2 个答案:

答案 0 :(得分:1)

通常,您将创建该单一路由并内联中间件:

app.post('/route', bodyParser.json(...), function(req, res) {
  ...
});

接着是“正常”设置:

app.use(bodyParser.json());

app.post('/another-route', function(req, res) {
  ...
});

您也可以考虑使用bodyParser.raw()

,而不是滥用bodyParser.json()

答案 1 :(得分:0)

如果要简单地引用具体路线,那么这将是有效的。这是一个非常简单的想法表示:

var routeIWantToBuffer = "someroute";
app.use(bodyParser.json(
  {
    verify: function(req, res, buf) { 
      if(req.route === routeIWantToBuffer) req.rawBody = buf;
    }
  }
));

通常,路由/使用函数也有一个next参数,用于继续链。我不是说这是错的,但我不知道你的代码的其余部分是什么样的。但我希望它看起来像这样:

var routeIWantToBuffer = "someroute";
app.use(bodyParser.json(
  {
    verify: function(req, res, buf, next) { 
      if(req.route === routeIWantToBuffer) req.rawBody = buf;
      next();
    }
  }
));