Saya memiliki ini sebagai konfigurasi server Express saya
app.use(app.router);
app.use(express.cookieParser());
app.use(express.session({ secret: "keyboard cat" }));
app.set('view engine', 'ejs');
app.set("view options", { layout: true });
//Handles post requests
app.use(express.bodyParser());
//Handles put requests
app.use(express.methodOverride());
Tapi tetap ketika saya meminta req.body.something
rute saya, saya mendapatkan beberapa kesalahan menunjukkan itu body is undefined
. Berikut adalah contoh rute yang menggunakan req.body
:
app.post('/admin', function(req, res){
console.log(req.body.name);
});
Saya membaca bahwa masalah ini disebabkan oleh kurangnya app.use(express.bodyParser());
tetapi seperti yang Anda lihat saya menyebutnya sebelum rute.
Ada petunjuk?
Versi Express terbaru (4.x) telah membatalkan ikatan middleware dari kerangka inti. Jika Anda membutuhkan pengurai tubuh, Anda harus menginstalnya secara terpisah
dan kemudian lakukan ini dalam kode Anda
sumber
app.use(bodyParser.urlencoded({ extended: false })); app.use(bodyParser.json())
menyelamatkan saya !!Tidak. Anda harus menggunakan
app.use(express.bodyParser())
sebelumnyaapp.use(app.router)
. Padahal,app.use(app.router)
seharusnya menjadi hal terakhir yang Anda telepon.sumber
app.use(app.router)
bawah.use
panggilan tidak menyelesaikan masalah :(.app.use(require('connect').bodyParser());
bukanapp.use(express.bodyParser());
.var router=express.Router()
;Pertama pastikan, Anda telah menginstal modul npm bernama 'body-parser' dengan menelepon:
Kemudian pastikan Anda telah memasukkan baris berikut sebelum memanggil rute
sumber
Express 4, memiliki pengurai tubuh bawaan. Tidak perlu menginstal body-parser yang terpisah. Jadi di bawah ini akan berfungsi:
sumber
Content-Type dalam header permintaan sangat penting, terutama ketika Anda memposting data dari curl atau alat lain.
Pastikan Anda menggunakan sesuatu seperti application / x-www-form-urlencoded, application / json atau yang lainnya, itu tergantung pada data posting Anda. Biarkan bidang ini kosong akan membingungkan Express.
sumber
Seperti yang sudah diposting di bawah satu komentar, saya menyelesaikannya menggunakan
dari pada
Saya masih tidak tahu mengapa yang sederhana
express.bodyParser()
tidak berfungsi ...sumber
connect
modul vianpm install connect
dan coba lagi. Ini adalah satu-satunya hal yang dapat saya pikirkan dengan membaca output dari kesalahan Anda.Content-Type
tajukapplication/json
.Content-Type
tajukapplication/json
ketika saya melakukan permintaan saya.application/json
vstext/json
dalam permintaan berfungsi, seperti yang disarankan oleh @GrantEagon.sumber
Tambahkan di
app.js
sebelum panggilan Router
sumber
Sepertinya body-parser tidak lagi dikirim dengan express. Kami mungkin harus menginstalnya secara terpisah.
Lihat halaman git https://github.com/expressjs/body-parser untuk info dan contoh lebih lanjut.
sumber
Seandainya ada orang yang mengalami masalah yang sama dengan yang saya alami; Saya menggunakan awalan url seperti
yang diatur dengan router
dan kemudian saya memiliki yang berikut
Apa yang memperbaiki masalah saya adalah menempatkan konfigurasi bodyparser di atas
app.use('/api', router);
Terakhir
sumber
express.bodyParser () perlu diberi tahu jenis konten apa yang diuraikan. Oleh karena itu, Anda perlu memastikan bahwa ketika Anda menjalankan permintaan POST, bahwa Anda termasuk header "Tipe Konten". Jika tidak, bodyParser mungkin tidak tahu apa yang harus dilakukan dengan isi permintaan POST Anda.
Jika Anda menggunakan ikal untuk menjalankan permintaan POST yang berisi beberapa objek JSON di dalam tubuh, itu akan terlihat seperti ini:
Jika menggunakan metode lain, pastikan untuk mengatur bidang header itu menggunakan konvensi apa pun yang sesuai.
sumber
Gunakan app.use (bodyparser.json ()); sebelum routing. //. app.use ("/ api", rute);
sumber
Anda dapat mencoba menambahkan baris kode ini di bagian atas, (setelah Anda memerlukan pernyataan):
Adapun alasan mengapa itu bekerja, periksa dokumen: https://www.npmjs.com/package/body-parser#bodyparserurlencodedoptions
sumber
Sebagian besar waktu req.body tidak terdefinisi karena parser JSON hilang
bisa hilang untuk parser tubuh
dan kadang-kadang itu tidak ditentukan karena asal silang jadi tambahkan mereka
sumber
Ini terjadi pada saya hari ini. Tidak ada solusi di atas yang berfungsi untuk saya. Tapi sedikit googling membantu saya untuk menyelesaikan masalah ini. Saya sedang mengkode untuk server pihak ketiga WeChat.
Hal-hal menjadi sedikit lebih rumit ketika aplikasi node.js Anda perlu membaca streaming data POST, seperti permintaan dari klien REST. Dalam hal ini, properti permintaan "dapat dibaca" akan disetel ke true dan data POST harus dibaca dalam potongan untuk mengumpulkan semua konten.
http://www.primaryobjects.com/CMS/Article144
sumber
Banyak waktu terbuang:
Tergantung pada Content-Type di Anda klien permintaan
tersebut server yang harus memiliki yang berbeda, salah satu di bawah ini app.use ():
Sumber: https://www.npmjs.com/package/body-parser#bodyparsertextoptions
Contoh:
Bagi saya, Di sisi Klien, saya memiliki header di bawah ini:
Jadi, di sisi server, saya menggunakan:
Kemudian, req.body bekerja dengan baik.
sumber
di Express 4, ini sangat sederhana
sumber
Agar berfungsi, Anda perlu app.use (app.router) setelah app.use (express.bodyParser ()) , seperti itu:
sumber
app.use
padaapp.router
sebelumexpress.bodyParser
tapi kode Anda jelas menunjukkan SETELAH itu. Jadi yang mana?Ini menyelamatkan hari saya.
sumber
Masalah ini mungkin karena Anda belum menggunakan body-parser ( tautan )
sumber
Saya menyelesaikannya dengan:
sumber
Ini juga satu kemungkinan : Pastikan Anda harus menulis kode ini sebelum rute di file app.js (atau index.js) Anda.
sumber
Anda dapat menggunakan pengurai tubuh ekspres.
sumber
Versi Express terbaru sudah memiliki body-parser built-in. Jadi Anda bisa menggunakan:
sumber
Jika Anda mengirim pesan SOAP, Anda perlu menggunakan pengurai tubuh mentah:
sumber
Membangun @ kevin-xue berkata, tipe konten perlu dideklarasikan. Dalam contoh saya, ini hanya terjadi dengan IE9 karena XDomainRequest tidak menetapkan tipe konten , jadi bodyparser dan expressjs mengabaikan tubuh permintaan.
Saya menyiasatinya dengan mengatur tipe-konten secara eksplisit sebelum meneruskan permintaan ke body parser, seperti:
sumber
Kredit ke @spikeyang untuk jawaban yang bagus (disediakan di bawah). Setelah membaca artikel yang disarankan di pos, saya memutuskan untuk membagikan solusi saya.
Kapan harus menggunakan?
Solusi ini mengharuskan Anda untuk menggunakan router ekspres untuk menikmatinya .. jadi: Jika Anda sudah mencoba menggunakan jawaban yang diterima tanpa hasil, cukup gunakan fungsi salin dan tempel fungsi ini:
dan menyebutnya seperti:
CATATAN: Untuk muatan besar - silakan gunakan buffer array ( selengkapnya @ MDN )
sumber
Jika Anda menggunakan beberapa alat eksternal untuk membuat permintaan, pastikan untuk menambahkan header:
Content-Type: application/json
sumber
Bagi siapa pun yang tidak ada jawaban di atas yang bekerja untuk saya harus mengaktifkan kor antara front-end dan express saya.
Anda dapat melakukan ini dengan:
Mengunduh dan menghidupkan ekstensi CORS untuk browser Anda, seperti:
https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi?hl=id
untuk Chrome,
atau oleh
Menambahkan garis
ke
app.js
halaman ekspres Anda . (Setelahnpm install cors
)sumber