現象
Node.js + Express4 で Request body に JSON 形式の大量のデータ(100kb以上)を添付すると、
HTTP Response で 400 Bad Request , error: "request entity too large" が発生した。
発生時環境:
* Node.js 12.19.0
* TypeScript 4.0.3
* express 4.17.1
(プロジェクトは express-generator-typescript 1.7.1 で作成)
解決策
Express の初期設定時に、下記のように Request body size の上限を大きく設定する。
app.use(express.json({limit:'100mb'}));
原因
Express 4 の Request Body サイズ上限のデフォルト値が 100kb であるため。
( Expressの API リファレンスに記載されています。)
謝辞
こちらも参考にしました。(ですが、執筆時では middleware の body-parser の設定を変更する必要はありませんでした。)
* https://qiita.com/PianoScoreJP/items/3fbcebc43ebf821074d8
* https://qiita.com/Safire/items/dee77bf01fe35deb1535
補足
上記の解決策は、 Request body の Content-Type が JSON の場合の対応ですが、
raw データを受信する場合は、
app.use(express.raw({limit:'10gb'});
url-encoded データを受信する場合は、
app.use(express.urlencoded({limit:'100tb'});
のように設定すれば良いようです。(これらは未確認)
詳細は、Expressの API リファレンスを参照してください。
また、指定可能な補助単位(k,g,t, etc.) はbytesを参照してください。