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
}

セキュリティ上の理由から、以外のルートで 500 GB 以上の投稿を許可したくない/uploadので、ミドルウェアでグローバルにではなく、特定のルートで制限を指定する方法を見つけようとしています。

bodyParser() のマルチパート ミドルウェアが既にコンテンツ タイプを盗聴していることは知っていますが、それをさらに制限したいと考えています。

これは Express 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 LargeURLに 3MB のファイルをアップロードしようとすると、エラーが発生しuploadます。

これをどのように正しく行うのですか?

4

2 に答える 2

14

実際には、上記のヘキサシアニドで示唆されているように、app.use()単一のルートを制限する上で機能します。
問題は、ルート パスの順序から発生します。
上記の例に行くと、最初に配置する'/upload'と、bodyParser が最初にそのルールに一致する必要があります。

したがって、コードを次のように入れます(私はExpress 4.0 +を使用しています):

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

ここapp.use()で、メソッド呼び出し時に Express がミドルウェアをバインドする方法を確認できます。

于 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 に答える