簡體   English   中英

解決2.6.1如何禁用特定請求的主體解析器

[英]restify 2.6.1 how to disable body parser for specific request

我對node.js服務很新,我遇到了multipart / form-data內容類型的問題。 我需要一種方法來禁用特定請求的主體解析器功能。 我正在使用restify 2.6.1。 以下是配置的一些片段。

我的設置是:

    App.js :

    server.use(restify.authorizationParser());
    server.use(restify.dateParser());
    server.use(restify.queryParser());
    server.use(restify.jsonp());

    server.use(restify.bodyParser());
    server.use(restifyValidator);
    server.use(restify.gzipResponse());
    server.use(passport.initialize());
    server.use(restify.conditionalRequest());


Route.js : 
       app.post({path: '/test/upload/:upload_image_name', version: ver}, uploadCtr.uploadImage);
       app.post( {path: '/test/upload/:upload_image_name', version:ver }, passport.authenticate('bearer',{ session: false}),uploadCtr.uploadImage);

沒有restify.bodyParser()上傳圖像正在工作(但依賴於json解析器的所有內容都失敗了)

提前致謝。

默認情況下,不bodyParser()每個路徑使用bodyParser() 實際上,您應該只對需要分段上傳的路由使用bodyParser()

使用express.bodyParser的所有服務器都容易受到攻擊,這會在服務器上創建無限數量的臨時文件,可能會占用所有磁盤空間,這可能會導致服務器掛起。

示范

這個問題非常容易證明。 這是一個簡單的快遞應用程序:

 var express = require('express'); var app = express(); app.use(express.bodyParser()); app.post('/test', function(req, resp) { resp.send('ok'); }); app.listen(9001); 

看起來很無害對嗎?

現在用以下內容檢查你有多少個臨時文件:

 $ ls /tmp | wc -l 33 

接下來模擬上傳多部分表單:

 $ curl -X POST -F foo=@tmp/somefile.c http://localhost:9001/test ok 

返回並查看我們的臨時文件計數:

 $ ls /tmp | wc -l 34 

那是個問題。

http://andrewkelley.me/post/do-not-use-bodyparser-with-express-js.html

Restify也存在這個問題。

您可以通過將.bodyParser()替換為.bodyParser()來解決問題:

server.use( restify.queryParser() );
server.use( restify.jsonBodyParser() );

但是要回答關於特定路由的問題,您應該將所有路由不需要的任何中間件移動到路由特定的中間件中:

server.get('/route', restify.queryParser(), restify.jsonBodyParser(), routeHandler);

這也可以采用數組:

var routeMiddleware = [
      restify.queryParser(),
      restify.jsonBodyParser()
    ];

server.get('/route', routeMiddleware, routeHandler);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM