2017-09-08 58 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(); 
    } 
    } 
));