Saya menerima kesalahan berikut dengan 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
Saya menggunakan meanstack. Saya memiliki pernyataan penggunaan berikut di express.js saya
//Set Request Size Limit
app.use(express.limit(100000000));
Di dalam fiddler saya bisa melihat header panjang konten dengan nilai: 1078702
Saya percaya ini dalam oktet, ini adalah 1,0787 megabita.
Saya tidak tahu mengapa express tidak membiarkan saya memposting json array yang saya posting sebelumnya di proyek express lain yang tidak menggunakan struktur stack proyek rata-rata.
javascript
node.js
http
express
mike james
sumber
sumber
Jawaban:
Saya memiliki kesalahan yang sama baru-baru ini, dan semua solusi yang saya temukan tidak berfungsi.
Setelah beberapa penggalian, saya menemukan bahwa pengaturan
app.use(express.bodyParser({limit: '50mb'}));
memang menetapkan batas dengan benar.Saat menambahkan simpul
console.log('Limit file size: '+limit);
masuknode_modules/express/node_modules/connect/lib/middleware/json.js:46
dan mulai ulang, saya mendapatkan keluaran ini di konsol:Kita dapat melihat bahwa pada awalnya, ketika memuat
connect
modul, batasnya diatur ke 1mb (1048576 bytes). Kemudian ketika saya menetapkan batas,console.log
dipanggil lagi dan kali ini batasnya adalah 52428800 (50mb). Namun, saya masih mendapatkan413 Request entity too large
.Lalu aku menambahkan
console.log('Limit file size: '+limit);
dalamnode_modules/express/node_modules/connect/node_modules/raw-body/index.js:10
dan melihat garis lain di konsol saat memanggil rute dengan permintaan yang besar (sebelum output error):Ini berarti bahwa entah bagaimana, di suatu tempat,
connect
mengatur ulang parameter batas dan mengabaikan apa yang kami tentukan. Saya mencoba menentukanbodyParser
parameter dalam definisi rute secara individual, tetapi tidak berhasil juga.Meskipun saya tidak menemukan cara yang tepat untuk mengaturnya secara permanen, Anda dapat " menambal " itu dalam modul secara langsung. Jika Anda menggunakan Express 3.4.4, tambahkan ini pada baris 46 dari
node_modules/express/node_modules/connect/lib/middleware/json.js
:Nomor baris mungkin berbeda jika Anda tidak menjalankan versi Express yang sama. Harap dicatat bahwa ini adalah praktik buruk dan akan ditimpa jika Anda memperbarui modul Anda.
Jadi solusi sementara ini berfungsi untuk saat ini, tetapi segera setelah solusi ditemukan (atau modul diperbaiki, jika itu masalah modul) Anda harus memperbarui kode Anda sesuai.
Saya telah membuka masalah pada GitHub mereka tentang masalah ini.
[sunting - menemukan solusinya]
Setelah beberapa penelitian dan pengujian, saya menemukan bahwa ketika debugging, saya menambahkan
app.use(express.bodyParser({limit: '50mb'}));
, tetapi setelahapp.use(express.json());
. Express kemudian akan menetapkan batas global menjadi 1mb karena parser pertama yang ia temui saat menjalankan skripexpress.json()
. Bergerak dibodyParser
atas itu berhasil.Karena itu,
bodyParser()
metode ini akan usang di Connect 3.0 dan tidak boleh digunakan. Sebagai gantinya, Anda harus mendeklarasikan parser Anda secara eksplisit, seperti:Jika Anda membutuhkan multipart (untuk unggah file) lihat posting ini .
[edit kedua]
Perhatikan bahwa dalam Express 4, alih-alih
express.json()
danexpress.urlencoded()
, Anda harus memerlukan modul body-parser dan menggunakan metodejson()
dan caranyaurlencoded()
, seperti:Jika
extended
opsi tidak didefinisikan secara eksplisit untukbodyParser.urlencoded()
, itu akan memunculkan peringatan (body-parser deprecated undefined extended: provide extended option
). Ini karena opsi ini akan diperlukan di versi berikutnya dan tidak akan menjadi opsional lagi. Untuk info lebih lanjut tentangextended
opsi ini, Anda dapat merujuk ke readme ofbody-parser
.[sunting ketiga]
Tampaknya dalam Express v4.16.0 dan seterusnya, kita dapat kembali ke cara awal untuk melakukan ini (terima kasih kepada @GBMan untuk tipnya):
sumber
app.use(express.json({limit:'50mb'}));
. Saya mengedit jawaban saya untuk mencerminkan ini!urlencoded
panggilan413::Request Entity is too large
pengecualian yang sama . Itu tidak akan meneruskan permintaan ke aplikasi ekspres Anda. Jadi kita perlu mengaturclient_max_body_size 50M;
konfigurasi nginx ATAU konfigurasi server tertentu ATAU bahkan tag lokasi tertentu akan berfungsi.Saya menggunakan Express 4.
Dalam kasus saya, menambahkan baris-baris ini tidak cukup:
Saya mencoba menambahkan opsi parameterLimit pada fungsi urlencoded sebagai dokumentasi mengatakan dan kesalahan tidak lagi muncul.
Coba dengan kode ini:
sumber
Jika seseorang mencoba semua jawaban, tetapi belum berhasil dan menggunakan NGINX untuk meng-host situs tambahkan baris ini ke / etc / nginx / sites-available
sumber
body-parser
akan kembali suatulimit
properti danlength
properti di objek error (bersama denganstatus:413
). Nginx tidak melakukan ini. Jadi jika Anda tidak dapat melihat properti itu di objek kesalahan, itu mungkin batas nginx. Inilah cara mengubah pengaturan nginx ini (kemungkinan besar file konfigurasi/etc/nginx/sites-available/
)Saya tidak berpikir ini adalah batas ukuran global express, tetapi khususnya batas middleware connect.json . Ini 100kb secara default saat Anda menggunakan
express.bodyParser()
dan tidak memberikanlimit
opsi.Mencoba:
sumber
dalam kasus saya .. pengaturan
parameterLimit:50000
memperbaiki masalahsumber
body-parser
payload default tidak masalah bagi saya). Dipecahkan hanya dengan (tidak perlu mengatur s).parameterLimit
limit
2016, tidak satu pun di atas bekerja untuk saya sampai saya explicity mengatur 'tipe' selain 'batas' untuk bodyparser, contoh:
sumber
application/x-www-form-urlencoded
(bukanapplication/x-www-form-urlencoding
)?Berikut ini bekerja untuk saya ... Cukup gunakan
itu dia.
Sudah mencoba semuanya dan tidak ada yang berhasil. Menemukan bahwa meskipun kami menggunakan seperti berikut ini,
hanya yang pertama yang
app.use(bodyParser());
didefinisikan dan dua baris terakhir diabaikan.Lihat: https://github.com/expressjs/body-parser/issues/176 >> see 'dougwilson berkomentar pada 17 Juni 2016'
sumber
Untuk express ~ 4.16.0, express.json dengan limit bekerja secara langsung
sumber
Dalam kasus saya masalahnya ada pada konfigurasi Nginx . Untuk mengatasinya saya harus mengedit file:
/etc/nginx/nginx.conf
dan menambahkan baris ini di dalam blok server:Mulai ulang Nginx dan masalah itu hilang
sumber
Saya telah menggunakan praktik lain untuk masalah ini dengan multer dependancie.
Contoh:
sumber
Posting lama tapi saya punya masalah yang sama
Menggunakan express 4. + kode saya terlihat seperti ini dan berfungsi dengan baik setelah dua hari pengujian ekstensif.
sumber
Pendekatan yang sedikit berbeda - payloadnya terlalu BESAR
Semua jawaban yang bermanfaat sejauh ini berhubungan dengan meningkatkan batas muatan. Tetapi mungkin juga kasusnya bahwa muatannya memang terlalu besar tetapi tanpa alasan. Jika tidak ada alasan yang masuk akal untuk itu, pertimbangkan untuk mencari tahu mengapa itu begitu membengkak.
Pengalaman kita sendiri
Misalnya, dalam kasus kami, aplikasi Angular dengan rakus mengirim seluruh objek dalam muatan. Ketika satu properti yang membengkak dan berlebihan dihilangkan, ukuran muatan dikurangi sebesar faktor 100 . Ini secara signifikan meningkatkan kinerja dan menyelesaikan kesalahan 413.
sumber
Setelah ד o banyak percobaan saya mendapat solusi
Saya telah berkomentar di baris ini
dan saya taruh
Lalu berhasil
sumber
bagi saya potongan berikut memecahkan masalah.
sumber
Penggunaan yang lebih baik Anda dapat menentukan batas ukuran file Anda seperti yang ditunjukkan pada baris yang diberikan:
Anda juga dapat mengubah pengaturan default di node-modules body-parser kemudian di folder lib, ada JSON dan file teks. Kemudian ubah batas di sini. Sebenarnya, kondisi ini akan berlalu jika Anda tidak melewati parameter batas di baris app.use (bodyParser.json ({limit: '10mb', extended: true})).
sumber
Saya juga menghadapi masalah itu, saya membuat kesalahan konyol dengan mengulangi
app.use(bodyParser.json())
seperti di bawah ini:dengan menghapus
app.use(bodyParser.json())
, memecahkan masalah.sumber
Dalam kasus saya menghapus
Content-type
dari header permintaan berhasil.sumber
Bagi saya trik utamanya adalah
bodyParse.json first bodyParse.urlencoded kedua
sumber
Jika Anda menggunakan
express.json()
dan bodyParser bersama-sama itu akan memberikan kesalahan karena express menetapkan batasnya sendiri.hapus kode di atas dan tambahkan saja kode di bawah ini
sumber