2017-09-08 53 views
0

我需要抓取POST请求的rawBody(缓冲区),但我只需要在我的应用程序的单个路径上执行此操作。Express:rawBody /缓冲区在一条路径上

目前,我用我的主要app.js如下:

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

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

我该如何获得我需要的单一路径上的rawBody?

回答

1

通常情况下,你会创建一个路由和内嵌的中间件:

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

其次是“正常”的设置:

app.use(bodyParser.json()); 

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

而不是滥用bodyParser.json(),你也可以考虑使用bodyParser.raw()

0

如果它的琐碎来指代具体路线那么这将是work.This的想法非常简单的表示:

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