restify 2.6.1如何禁用特定请求的body parser

我对node.js服务非常陌生,而且我正面临一个multipart / form-data内容types的问题。 我需要一种方法来禁用特定请求的身体分析器function。 我正在使用restify 2.6.1。 下面是一些configuration的片段。

我的设置是:

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()上传图像工作(但依赖于jsonparsing器的一切都失败了)

提前致谢。

Solutions Collecting From Web of "restify 2.6.1如何禁用特定请求的body parser"

默认情况下,不应该为每个路由使用bodyParser() 。 实际上,您只能使用bodyParser()来处理需要分段上传的路由。

所有使用express.bodyParser的服务器都容易受到攻击,在服务器上创build无限数量的临时文件,可能会填满所有的磁盘空间,这很可能导致服务器挂起。

示范

这个问题非常容易演示。 这是一个简单的快速应用程序:

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

似乎很无害的权利?

现在检查一下你有多less个临时文件:

 $ 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);