6

这是一个在全球范围内为我工作的示例(Express 3)中间件设置:

app.configure(function () {
    app.use(express.static(__dirname + "/public"));
    app.use(express.bodyParser({
          keepExtensions: true,
          limit: 10000000, // set 10MB limit
          defer: true              
    }));
    //... more config stuff
}

出于安全原因,我不想在 以外的路由上允许 500GB+ 的帖子/upload,所以我试图弄清楚如何在特定路由上指定限制,而不是在中间件中全局指定限制。

我知道bodyParser() 中的多部分中间件已经嗅出内容类型,但我想进一步限制它。

这似乎不适用于快递 3:

app.use('/', express.bodyParser({
  keepExtensions: true,
  limit: 1024 * 1024 * 10,
  defer: true              
}));
app.use('/upload', express.bodyParser({
  keepExtensions: true,
  limit: 1024 * 1024 * 1024 * 500,
  defer: true              
}));

Error: Request Entity Too Large当我尝试在uploadURL上上传 3MB 文件时出现错误。

你如何正确地做到这一点?

4

2 回答 2

14

实际上正如上面的六氰化物所建议的那样,app.use()可以限制单一路线。
问题来自于路由路径的排序。
回到上面的例子,如果你把'/upload'它放在第一位,那么 bodyParser 应该首先匹配那个规则。

所以把代码写成这样(我使用的是 Express 4.0 +):

app.use("/PATH_WITH_LIMIT", bodyParser({ 
    limit: 1024 * 1000
}));
app.use("/",bodyParser());

您可以在此处查看 express 如何在app.use()方法调用上绑定中间件。

于 2014-05-17T19:43:44.413 回答
1

使用时只需指定可选的路径选项app.use()

app.use('/', express.bodyParser({
  keepExtensions: true,
  limit: 1024 * 1024 * 10,
  defer: true              
}));
app.use('/upload', express.bodyParser({
  keepExtensions: true,
  limit: 1024 * 1024 * 1024 * 500,
  defer: true              
}));
于 2013-09-23T01:52:16.543 回答