現象
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を参照してください。