Ini formulir sederhana saya:
<form id="loginformA" action="userlogin" method="post">
<div>
<label for="email">Email: </label>
<input type="text" id="email" name="email"></input>
</div>
<input type="submit" value="Submit"></input>
</form>
Ini kode Express.js /Node.js saya :
app.post('/userlogin', function(sReq, sRes){
var email = sReq.query.email.;
}
Saya mencoba sReq.query.email
atau sReq.query['email']
atau sReq.params['email']
, dll. Tidak ada yang berfungsi. Mereka semua kembali undefined
.
Ketika saya berganti ke Panggilan, itu berfungsi, jadi .. ada ide?
javascript
node.js
post
express
murvinlai
sumber
sumber
bodyParser()
dari jawaban di sini juga harus membaca jawaban @SeanLynch di bawah iniJawaban:
Segala sesuatu telah berubah sekali lagi mulai Express 4.16.0 , sekarang Anda dapat menggunakan
express.json()
danexpress.urlencoded()
seperti di Express 3.0 .Ini berbeda mulai Express 4.0 hingga 4.15 :
lalu:
Sisanya seperti di Express 3.0 :
Pertama, Anda perlu menambahkan beberapa middleware untuk mem-parsing data postingan tubuh.
Tambahkan satu atau kedua baris kode berikut:
Kemudian, di handler Anda, gunakan
req.body
objek:Perhatikan bahwa penggunaan
express.bodyParser()
tidak dianjurkan.... setara dengan:
Masalah keamanan ada bersama
express.multipart()
, dan karena itu lebih baik menambahkan secara eksplisit untuk jenis pengkodean spesifik yang Anda butuhkan. Jika Anda memerlukan pengkodean multi bagian (untuk mendukung mengunggah file misalnya) maka Anda harus membaca ini .sumber
content-type
set tajuk, misalnya:curl -d '{"good_food":["pizza"]}' -H 'content-type:application/json' "http://www.example.com/your_endpoint"
bodyParser
abstrak JSON, URL-encoded, dan multipart data kereq.body
objek.app.use(require('body-parser').json())
baris yang cukup. Dan kemudian Anda dapat membaca data json dari objek tubuh permintaan Anda, yaitureq.body
dari dalam definisi rute.Masalah keamanan menggunakan express.bodyParser ()
Sementara semua jawaban yang lain saat ini merekomendasikan menggunakan
express.bodyParser()
middleware, ini sebenarnya adalah sebuah bungkus sekitarexpress.json()
,express.urlencoded()
danexpress.multipart()
middlewares ( http://expressjs.com/api.html#bodyParser ). Penguraian badan permintaan formulir dilakukan olehexpress.urlencoded()
middleware dan hanya itu yang Anda perlukan untuk mengekspos data formulir Anda padareq.body
objek.Karena masalah keamanan dengan bagaimana
express.multipart()
/connect.multipart()
membuat file sementara untuk semua file yang diunggah (dan bukan sampah yang dikumpulkan), sekarang disarankan untuk tidak menggunakanexpress.bodyParser()
pembungkus tetapi gunakan hanya middlewares yang Anda butuhkan.Catatan:
connect.bodyParser()
akan segera diperbarui untuk hanya menyertakanurlencoded
danjson
ketika Connect 3.0 dirilis (yang diperluas Express).Jadi singkatnya, bukannya ...
...kamu harus menggunakan
dan jika / ketika Anda perlu menangani formulir multi-bagian (unggah file), gunakan perpustakaan pihak ketiga atau middleware seperti multi-partai, busboy, pemain dadu, dll.
sumber
multipart()
sebagai bagian daribodyParser()
,bodyParser()
menjadi "aman" lagi, tetapi Anda harus secara eksplisit mengaktifkan dukungan multi bagian menggunakan perpustakaan pihak ketiga.Catatan : jawaban ini untuk Express 2. Lihat di sini untuk Express 3.
Jika Anda menggunakan connect / express, Anda harus menggunakan middleware bodyParser : Ini dijelaskan dalam panduan Expressjs .
Ini versi asli yang hanya terhubung:
Querystring dan body diuraikan menggunakan penanganan parameter Rails-style (
qs
) daripada pustaka tingkat rendahquerystring
. Dalam rangka untuk mengurai parameter diulang denganqs
, parameter harus memiliki kurung:name[]=val1&name[]=val2
. Ini juga mendukung peta bersarang. Selain mem-parsing pengiriman form HTML, bodyParser dapat mem-parsing permintaan JSON secara otomatis.Sunting : Saya membaca di express.js dan mengubah jawaban saya agar lebih alami bagi pengguna Express.
sumber
Ini akan melakukannya jika Anda ingin membangun kueri yang diposting tanpa middleware:
Itu akan mengirim ini ke browser
Mungkin lebih baik menggunakan middleware sehingga Anda tidak perlu menulis ini berulang-ulang di setiap rute.
sumber
Catatan untuk pengguna Express 4:
Jika Anda mencoba dan memasukkan
app.use(express.bodyParser());
aplikasi Anda, Anda akan mendapatkan kesalahan berikut ketika Anda mencoba memulai server Express Anda:Anda harus menginstal paket
body-parser
secara terpisah dari npm , kemudian menggunakan sesuatu seperti berikut (contoh diambil dari halaman GitHub ):sumber
Diberikan beberapa bentuk:
Menggunakan express
Keluaran:
sumber
Backend:
Paling depan:
sumber
Kemudian untuk
app.post
permintaan Anda bisa mendapatkan nilai posting melaluireq.body.{post request variable}
.sumber
Pembaruan untuk Express 4.4.1
Middleware dari yang berikut ini dihapus dari Express.
Ketika Anda menggunakan middleware langsung seperti yang Anda lakukan di express 3.0. Anda akan mendapatkan kesalahan berikut:
Untuk memanfaatkan middleware tersebut, sekarang Anda harus melakukan npm untuk setiap middleware secara terpisah.
Karena bodyParser ditandai sebagai usang, jadi saya merekomendasikan cara berikut menggunakan json, urlencode dan multipart parser seperti tangguh, hubungkan-multipartai. (Multipart middleware juga tidak digunakan lagi).
Juga ingat, cukup mendefinisikan urlencode + json, formulir data tidak akan diuraikan dan req.body akan tidak terdefinisi. Anda perlu mendefinisikan middleware menangani permintaan multi-bagian.
sumber
Untuk Express 4.1 ke atas
Karena sebagian besar jawaban digunakan untuk Express, bodyParser, sambungkan; di mana banyak bagian sudah usang. Ada cara aman untuk mengirim benda pos multi bagian dengan mudah.
Multer dapat digunakan sebagai pengganti connect.multipart ().
Untuk menginstal paket
Muat di aplikasi Anda:
Dan kemudian, tambahkan di tumpukan middleware bersama dengan bentuk middleware parsing lainnya.
connect.json () menangani aplikasi / json
connect.urlencoded () menangani aplikasi / x-www-form-urlencoded
multer () menangani multipart / formulir-data
sumber
Saya sedang mencari masalah yang tepat ini. Saya mengikuti semua saran di atas tetapi req.body masih mengembalikan objek kosong {}. Dalam kasus saya, itu adalah sesuatu yang sederhana seperti html yang salah.
Di html formulir Anda, pastikan Anda menggunakan
'name'
atribut di tag input Anda, bukan hanya'id'
. Kalau tidak, tidak ada yang diuraikan.Kesalahan bodoh saya adalah keuntungan Anda.
sumber
Anda tidak harus menggunakan app.use (express.bodyParser ()) . BodyParser adalah gabungan dari json + urlencoded + mulitpart. Anda tidak boleh menggunakan ini karena multipart akan dihapus di connect 3.0.
Untuk mengatasinya, Anda dapat melakukan ini:
Sangat penting untuk mengetahui bahwa app.use (app.router) harus digunakan setelah json dan urlencoded, jika tidak app !
sumber
Permintaan streaming berfungsi untuk saya
sumber
postdata.split("&")
akan memuat modul intiquerystring = require('querystring')
dan kemudian menguraikan Andapostdata
denganquerystring.parse(postdata)
;Saya dapat menemukan semua parameter dengan menggunakan kode berikut untuk permintaan POST dan GET .
sumber
Ditulis pada versi Express 4.16
Di dalam fungsi router Anda dapat menggunakan
req.body
properti untuk mengakses variabel post. Misalnya jika ini adalahPOST
rute formulir Anda, itu akan mengirim kembali apa yang Anda masukkan:PS untuk mereka yang terbiasa dengan PHP: Untuk mengakses
$_GET
variabel PHP yang kami gunakanreq.query
dan untuk mengakses$_POST
variabel PHP yang kami gunakanreq.body
di Node.js.sumber
sumber
Parameter Post dapat diambil sebagai berikut:
sumber
param
digunakan untuk MENDAPATKAN permintaan .. bukan POST dan contoh Anda kurang detail, sangat membingungkan bagi pendatang baru. Dan di atas iturequest.param
sebenarnya sudah usang, jadi contoh Anda salah pada banyak tingkatan.Anda menggunakan
req.query.post
dengan metode yang salahreq.query.post
bekerjamethod=get
,method=post
bekerja dengan body-parser .Coba saja ini dengan mengubah pos untuk mendapatkan :
Dan dalam kode kilat gunakan 'app.get'
sumber
Gunakan paket -fileupload ekspres :
sumber