[解決済み】エラー:リクエストのエンティティが大きすぎる
質問内容
Expressで以下のエラーが発生します。
Error: request entity too large
at module.exports (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/node_modules/connect/node_modules/raw-body/index.js:16:15)
at json (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/node_modules/connect/lib/middleware/json.js:60:5)
at Object.bodyParser [as handle] (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/node_modules/connect/lib/middleware/bodyParser.js:53:5)
at next (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/node_modules/connect/lib/proto.js:193:15)
at Object.cookieParser [as handle] (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/node_modules/connect/lib/middleware/cookieParser.js:60:5)
at next (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/node_modules/connect/lib/proto.js:193:15)
at Object.logger (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/node_modules/connect/lib/middleware/logger.js:158:5)
at next (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/node_modules/connect/lib/proto.js:193:15)
at Object.staticMiddleware [as handle] (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/node_modules/connect/lib/middleware/static.js:55:61)
at next (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/node_modules/connect/lib/proto.js:193:15)
TypeError: /Users/michaeljames/Documents/Projects/Proj/mean/app/views/includes/foot.jade:31
29| script(type="text/javascript", src="/js/socketio/connect.js")
30|
> 31| if (req.host='localhost')
32| //Livereload script rendered
33| script(type='text/javascript', src='http://localhost:35729/livereload.js')
34|
Cannot set property 'host' of undefined
at eval (eval at <anonymous> (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/jade/lib/jade.js:152:8), <anonymous>:273:15)
at /Users/michaeljames/Documents/Projects/Proj/mean/node_modules/jade/lib/jade.js:153:35
at Object.exports.render (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/jade/lib/jade.js:197:10)
at Object.exports.renderFile (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/jade/lib/jade.js:233:18)
at View.exports.renderFile [as engine] (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/jade/lib/jade.js:218:21)
at View.render (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/lib/view.js:76:8)
at Function.app.render (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/lib/application.js:504:10)
at ServerResponse.res.render (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/lib/response.js:801:7)
at Object.handle (/Users/michaeljames/Documents/Projects/Proj/mean/config/express.js:82:29)
at next (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/node_modules/connect/lib/proto.js:188:17)
POST /api/0.1/people 500 618ms
meanstackを使用しています。私のexpress.jsには次のようなuse文があります。
//Set Request Size Limit
app.use(express.limit(100000000));
fiddler内では、content-lengthヘッダの値が確認できます。1078702
これはオクテット単位で、1.0787メガバイトに相当すると思います。
以前、平均的なスタックプロジェクト構造を使用していない別のエクスプレスプロジェクトで投稿していたjson配列を、なぜエクスプレスが投稿させてくれないのか、まったくわかりません。
どうすればいいですか?
最近、同じエラーが発生し、見つけたすべての解決策がうまくいきませんでした。
いろいろと調べてみると
app.use(express.bodyParser({limit: '50mb'}));
は、制限を正しく設定しました。
を追加した場合
console.log('Limit file size: '+limit);
で
node_modules/express/node_modules/connect/lib/middleware/json.js:46
を実行し、nodeを再起動すると、コンソールに次のような出力が表示されます。
Limit file size: 1048576
connect.multipart() will be removed in connect 3.0
visit https://github.com/senchalabs/connect/wiki/Connect-3.0 for alternatives
connect.limit() will be removed in connect 3.0
Limit file size: 52428800
Express server listening on port 3002
を読み込むと、最初は
connect
モジュールでは、1mb (1048576 bytes)に制限されています。その後、制限をかけると
console.log
が再び呼び出され、今度は52428800 (50mb)が制限されます。しかし、まだ
413 Request entity too large
.
次に
console.log('Limit file size: '+limit);
で
node_modules/express/node_modules/connect/node_modules/raw-body/index.js:10
で、大きなリクエストでルートを呼び出すと、コンソールに別の行が表示されました (エラー出力の前)。
Limit file size: 1048576
これはつまり、何らかの形で、どこかで
connect
は limit パラメータをリセットし、指定したものを無視します。試しに
bodyParser
のパラメータを個別にルート定義に追加しましたが、これもうまくいきませんでした。
永続的に設定する適切な方法は見つかりませんでしたが、"
パッチ
モジュールに直接書き込んでください。Express 3.4.4 を使用している場合、次の行を追加します。
node_modules/express/node_modules/connect/lib/middleware/json.js
:
limit = 52428800; // for 50mb, this corresponds to the size in bytes
同じバージョンのExpressを使用していない場合、行番号が異なる場合があります。 ご注意ください。 バッドプラクティス となり 上書き モジュールを更新した場合
ですから、この一時的な解決策は今のところ有効ですが、解決策が見つかり次第(あるいは、モジュールの問題の場合はモジュールが修正され次第)、それに応じてコードを更新する必要があります。
を開設しました。 をGitHubのissueに登録しました。 この問題については
[編集 - 解決策が見つかりました].
いろいろ調べて試した結果、デバッグ時に
app.use(express.bodyParser({limit: '50mb'}));
が、しかし
の後に
app.use(express.json());
. その後、Express はグローバル リミットを 1MB に設定します。これは、彼がスクリプトを実行したときに最初に遭遇したパーサーが
express.json()
. 移動
bodyParser
を上にすると、うまくいきました。
とはいえ、この
bodyParser()
メソッドは Connect 3.0 で非推奨となるため、使用しないでください。代わりに、以下のように明示的にパーサーを宣言する必要があります。
app.use(express.json({limit: '50mb'}));
app.use(express.urlencoded({limit: '50mb'}));
マルチパート(ファイルアップロード用)が必要な場合は、以下を参照してください。 この記事 .
[2回目の編集]。
なお、Express4では
express.json()
と
express.urlencoded()
を指定する必要があります。
ボディパーサー
モジュールを使用し、その
json()
と
urlencoded()
というメソッドがあります。
var bodyParser = require('body-parser');
app.use(bodyParser.json({limit: '50mb'}));
app.use(bodyParser.urlencoded({limit: '50mb', extended: true}));
もし
extended
オプションが明示的に定義されていない場合は
bodyParser.urlencoded()
の場合、警告が表示されます (
body-parser deprecated undefined extended: provide extended option
). これは、次のバージョンでこのオプションが必須となり
ない
はもうオプションではありません。の詳細については
extended
オプションは
リードミー
の
body-parser
.
[第三の編集]
Express v4.16.0 以降では、初期の方法に戻せるようです(@GBMan さんのご指摘に感謝します)。
app.use(express.json({limit: '50mb'}));
app.use(express.urlencoded({limit: '50mb'}));
関連
-
[解決済み】Heroku:ノードアプリで「このアプリにはデフォルトの言語が検出されませんでした」エラーがスローされる
-
[解決済み】フォームコントロールの値アクセサがない
-
[解決済み】Javascript - ERR_CONTENT_LENGTH_MISMATCH
-
[解決済み】Vueのテンプレートまたはレンダー関数が定義されていない 私はどちらも使っていないのですが?
-
[解決済み】ES6マップオブジェクトをソートすることは可能ですか?
-
[解決済み] HTTP GET(リクエストボディ付き
-
[解決済み] HTTP POSTリクエストでは、どのようにパラメータが送信されるのですか?
-
[解決済み] node.jsでHTTP POSTリクエストはどのように行われるのですか?
-
[解決済み] エラーが発生しました。クライアントに送信された後にヘッダーを設定できない
-
[解決済み] HTTP DELETE リクエストにエンティティボディは許されますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】 Uncaught TypeError: data.push is not a function
-
[解決済み】JavaScriptで':'(コロン)は何をするのか?
-
[解決済み】Uncaught ReferenceError: angular is not defined - AngularJSが動作しない。
-
[解決済み】JavaScriptのボタンonclickが機能しない
-
[解決済み】エラー:リクエストのエンティティが大きすぎる
-
[解決済み】JavaScriptで相対URLへのリダイレクトを行う
-
[解決済み】TypeError: AngularJSで未定義のプロパティ'get'を読み取れない
-
[解決済み】 \u003C とは何ですか?
-
[解決済み] Express アプリケーションで JSON POST データを消費する方法
-
[解決済み] nginx.confを編集してファイルサイズのアップロードを増やす方法