30

Node.js と Express を使用しています。

HTTP リクエストのサイズを制限したいと考えています。たとえば、誰かが 2 MB を超える HTTP リクエストを送信した場合、すぐにリクエストを停止します。コードを見て、コアを変えればできると思います。しかし、そのようなものを設定する方法はありmax_request_sizeますか?

それは私の2番目の質問に関連しています。からアップロードされたファイルを取得するためにエクスプレスを使用していますreq.files/tmpファイル サイズが特定のファイル サイズを超えるとすぐに、フォルダーへのファイルの書き込み (既定のアップロード動作) を停止する方法はありますか?

4

7 に答える 7

33

コメントを追加できないため、更新のみ (07-2014):

上で正しく述べたように、新しい Express バージョンではミドルウェアの使用が推奨されなくなり、ミドルウェアの組み込みオプションとしてlimit提供されるようになりました。BodyParser

   var express    = require('express')
   var bodyParser = require('body-parser')

   var app = express()
   app.use(bodyParser.json({ limit: '5mb' }))
于 2014-07-22T17:31:00.363 に答える
13

Express は Connect を使用しますが、これには利用可能なミドルウェアが限られています。これを Express アプリで使用するには、次のようにします。

app.use(express.limit('2mb'));

たとえば、すべての HTTP リクエストが 2 MB に制限されます。アップロードされたファイルは HTTP 要求の一部であるため、2 MB を超えるファイルのアップロードも中止されます。


注:このミドルウェアは推奨されておらず、まもなく削除されます。これが事実である理由についての議論は、https ://github.com/senchalabs/connect/pull/925#issuecomment-26990726 で入手できます。

于 2012-01-29T09:53:52.760 に答える
13

ノード github のソースコード:

/* Maximium header size allowed. If the macro is not defined
 * before including this header then the default is used. To
 * change the maximum header size, define the macro in the build
 * environment (e.g. -DHTTP_MAX_HEADER_SIZE=<value>). To remove
 * the effective limit on the size of the header, define the macro
 * to a very large number (e.g. -DHTTP_MAX_HEADER_SIZE=0x7fffffff)
 */
#ifndef HTTP_MAX_HEADER_SIZE
# define HTTP_MAX_HEADER_SIZE (80*1024)
#endif 

したがって、ソースからノードを再構築して、80*1024 の制限を超える必要があります。

Express 4 でこれを使用して、express.json() および express.urlencoded() の代わりにリクエスト本文のサイズ/アップロード ファイルのサイズを制限できます。 body-parser モジュールを要求し、その json() および urlencoded() メソッドを使用する必要があります。拡張オプションが bodyParser.urlencoded() に対して明示的に定義されていない場合、警告がスローされます (body-parser deprecated undefined extended: provide extended option)。

var bodyParser = require('body-parser');
app.use(bodyParser.json({limit: '50mb'}));
app.use(bodyParser.urlencoded({limit: '50mb', extended: true}));
于 2017-03-29T12:19:59.023 に答える
0

を使用しraw-bodyます。ほとんどのミドルウェア (limit など) は Express にバンドルされなくなり、個別にインストールする必要があります。これが例です。

var getRawBody = require('raw-body')
app.use(function (req, res, next) {
      getRawBody(
        stream = req,
        options = {
          length: req.headers['content-length'],
          limit: '100mb',
        },
        callback = function (err, reslt) {
          if (err) {
            return next(err)
          }
          next();
          console.log(req)
        })
    })
  • の後にルーターを追加することを忘れないでくださいapp.use

Express では、以下に示すように、バンドルされている従来のミドルウェアを使用して制限を明示的に設定することはできなくなりました。

app.use(express.limit('4M'));
于 2016-12-19T23:32:14.757 に答える