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器的一切都失败了)
提前致谢。
默认情况下,不应该为每个路由使用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);