我对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);
Run Code Online (Sandbox Code Playgroud)
没有restify.bodyParser()上传图像正在工作(但依赖于json解析器的所有内容都失败了)
提前致谢.
Eri*_*ott 11
bodyParser()默认情况下,不应该为每个路由使用.实际上,您应该只bodyParser()用于需要分段上传的路由.
使用express.bodyParser的所有服务器都容易受到攻击,这会在服务器上创建无限数量的临时文件,可能会占用所有磁盘空间,这可能会导致服务器挂起.
示范
这个问题非常容易证明.这是一个简单的快递应用程序:
Run Code Online (Sandbox Code Playgroud)var express = require('express'); var app = express(); app.use(express.bodyParser()); app.post('/test', function(req, resp) { resp.send('ok'); }); app.listen(9001);看起来很无害对吗?
现在用以下内容检查你有多少个临时文件:
Run Code Online (Sandbox Code Playgroud)$ ls /tmp | wc -l 33接下来模拟上传多部分表单:
Run Code Online (Sandbox Code Playgroud)$ curl -X POST -F foo=@tmp/somefile.c http://localhost:9001/test ok返回并查看我们的临时文件计数:
Run Code Online (Sandbox Code Playgroud)$ ls /tmp | wc -l 34那是个问题.
http://andrewkelley.me/post/do-not-use-bodyparser-with-express-js.html
Restify也存在这个问题.
您可以通过替换.bodyParser()为:
server.use( restify.queryParser() );
server.use( restify.jsonBodyParser() );
Run Code Online (Sandbox Code Playgroud)
但是要回答关于特定路由的问题,您应该将所有路由不需要的任何中间件移动到路由特定的中间件中:
server.get('/route', restify.queryParser(), restify.jsonBodyParser(), routeHandler);
Run Code Online (Sandbox Code Playgroud)
这也可以采用数组:
var routeMiddleware = [
restify.queryParser(),
restify.jsonBodyParser()
];
server.get('/route', routeMiddleware, routeHandler);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2709 次 |
| 最近记录: |