【发布时间】:2012-09-07 06:08:25
【问题描述】:
我是 node.js 和 express 的新手,并且已经尝试了一段时间。现在我对与解析请求正文相关的 express 框架的设计感到困惑。 来自express官方指南:
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(logErrors);
app.use(clientErrorHandler);
app.use(errorHandler);
设置好所有中间件后,我们添加我们要处理的路由:
app.post('/test', function(req, res){
//do something with req.body
});
这种方法的问题是在检查路由有效性之前会先解析所有请求正文。解析无效请求的主体似乎非常低效。更重要的是,如果我们启用上传处理:
app.use(express.bodyParser({uploadDir: '/temp_dir'}));
任何客户端都可以通过上传任何文件来轰炸服务器(通过向任何路由/路径发送请求!!),所有这些都将被处理并保存在“/temp_dir”中。我不敢相信这种默认方法正在被广泛推广!
我们当然可以在定义路由的时候使用bodyParser函数:
app.post('/test1', bodyParser, routeHandler1);
app.post('/test2', bodyParser, routeHandler2);
甚至可能在处理路由的每个函数中解析主体。但是,这样做很乏味。
有没有更好的方法让 express.bodyParser 只用于所有有效(已定义)的路由,并且只在选定的路由上使用文件上传处理功能,而无需大量重复代码?
【问题讨论】: