Bagaimana proses POSTING data di Node.js?
Bagaimana anda mengekstrak bentuk data (form[method="post"]
) dan upload file yang dikirim dari HTTP POST
metode dalam Node.js?
I'telah membaca dokumentasi, cari di google dan menemukan apa-apa.
function (request, response) {
//request.post????
}
Ada perpustakaan atau hack?
586
27
Anda dapat menggunakan
querystring
modul:Sekarang, misalnya, jika anda memiliki sebuah
input
field dengan namausia
, anda bisa mengaksesnya menggunakan variabelpost
:Jika anda menggunakan Express (high-performance, high-kelas pengembangan web untuk Node.js), anda dapat melakukan ini:
HTML:
Klien API:
Node.js: (sejak Express v4.16.0)
Node.js: (untuk Express <4.16.0)
Pastikan untuk membunuh koneksi jika seseorang mencoba untuk banjir RAM anda!
Berikut ini's sangat sederhana tanpa framework wrapper berdasarkan jawaban yang lain dan artikel yang diposting di sini:
Contoh penggunaan:
Banyak dari jawaban berikut yang tidak praktik-praktik yang baik lagi atau don't menjelaskan apa-apa, sehingga's mengapa saya'm menulis ini.
Dasar-dasar
Ketika balik dari http.createServer disebut, adalah ketika server telah benar-benar menerima semua header permintaan, tapi itu's mungkin bahwa data belum diterima, jadi kita harus menunggu untuk itu. The http request objek(http.IncomingMessage contoh) adalah benar-benar dibaca stream. Di readable stream setiap kali sepotong data tiba, sebuah
data
acara dipancarkan(dengan asumsi anda telah terdaftar callback untuk itu) dan ketika semua potongan telah tiba sebuahakhir
acara yang dipancarkan. Berikut ini's contoh tentang bagaimana anda mendengarkan acara:Mengkonversi Buffer String
Jika anda mencoba ini, anda akan melihat potongan-potongan yang buffer. Jika anda tidak berurusan dengan data biner dan perlu untuk bekerja dengan string bukannya saya sarankan menggunakan request.setEncoding metode yang menyebabkan aliran memancarkan string ditafsirkan dengan mengingat encoding dan menangani multi-byte karakter dengan benar.
Buffering Potongan
Sekarang anda mungkin tidak tertarik dalam setiap chunk oleh itu's sendiri, jadi dalam hal ini mungkin anda ingin buffer seperti ini:
Di Sini Buffer.concat digunakan, yang hanya merangkai semua buffer dan kembali satu penyangga. Anda juga dapat menggunakan concat-streaming modul yang tidak sama:
Parsing Konten
Jika anda mencoba untuk menerima bentuk HTML PASCA pengajuan dengan tidak ada file atau menyerahkan jQuery ajax panggilan dengan default tipe konten, maka konten jenis adalah
application/x-www-form-urlencoded
denganuft-8
encoding. Anda dapat menggunakan querystring modul untuk de-cerita bersambung itu dan mengakses properties:Jika konten anda adalah tipe JSON sebaliknya, anda hanya dapat menggunakan JSON.parse bukan qs.parse.
Jika anda berurusan dengan file atau penanganan multipart jenis konten, maka dalam hal ini, anda harus menggunakan sesuatu seperti yang tangguh yang menghilangkan semua rasa sakit dari berurusan dengan itu. Silahkan lihat di ini jawaban lain saya di mana saya telah diposting link bermanfaat dan modul untuk multipart konten.
Pipa
Jika anda don't ingin mengurai isi melainkan menyebarkannya ke tempat lain, misalnya mengirim ke yang lain permintaan http sebagai data atau menyimpan ke file saya sarankan piping daripada buffering itu, seperti'll be kode kurang, menangani tekanan balik yang lebih baik, it'll mengambil sedikit memori dan dalam beberapa kasus lebih cepat.
Jadi jika anda ingin menyimpan konten ke file:
Membatasi Jumlah Data
Sebagai jawaban lain telah mencatat menjaga dalam pikiran saya bahwa klien berbahaya mungkin mengirimkan sejumlah besar data crash aplikasi atau mengisi memori anda sehingga untuk melindungi pastikan anda drop permintaan yang memancarkan data yang melewati batas tertentu. Jika anda don't menggunakan perpustakaan untuk menangani data yang masuk. Saya akan menyarankan menggunakan sesuatu seperti stream-meter yang dapat membatalkan permintaan jika mencapai batas yang ditentukan:
atau
atau
NPM Modul
Sementara aku yang dijelaskan di atas pada bagaimana anda dapat menggunakan HTTP request tubuh, hanya untuk buffering dan parsing isi, saya menyarankan menggunakan salah satu dari modul ini agak menerapkan pada anda sendiri karena mereka mungkin akan menangani kasus tepi yang lebih baik. Untuk mengekspresikan saya sarankan menggunakan body-parser. Untuk koa, ada's mirip modul.
Jika anda don't menggunakan framework, tubuh cukup baik.
Itu akan lebih bersih jika anda encode data anda untuk JSON, kemudian mengirimkannya ke Node.js.
Bagi siapa saja yang bertanya-tanya bagaimana untuk melakukan hal ini sepele tugas tanpa menginstal framework web saya berhasil celepuk ini bersama-sama. Hampir siap produksi tapi tampaknya bekerja.
Anda dapat menggunakan
body-parser
, yang Node.js tubuh parsing middleware.Beban pertama
body-parser
Beberapa contoh kode
Dokumentasi lebih lanjut dapat ditemukan di sini
Referensi: https://nodejs.org/en/docs/guides/anatomy-of-an-http-transaction/
Berikut adalah bagaimana anda bisa melakukannya jika anda menggunakan node-tangguh:
Jika anda memilih untuk menggunakan murni Node.js maka anda mungkin ekstrak POSTING data seperti ditunjukkan di bawah ini:
Install
'body-parser'
dari npm.Maka anda aplikasi.ts
di app.ts modul
di atas atau sebelum modul deklarasi.
Ex:
Jika anda don't ingin chunk data anda bersama-sama dengan
data
callback anda dapat selalu menggunakandibaca
callback seperti ini:Pendekatan ini memodifikasi permintaan yang masuk, tetapi segera setelah anda selesai respon permintaan akan menjadi sampah yang dikumpulkan, sehingga seharusnya tidak menjadi masalah.
Lanjutan pendekatan yang akan memeriksa ukuran tubuh pertama, jika anda're takut besar tubuh.
Anda perlu untuk menerima
POST
data dalam potongan menggunakanpermintaan.pada('data', fungsi(chunk) {...})
Anda harus mempertimbangkan menambahkan batas ukuran pada bagian yang ditunjukkan posisi sebagai thejh menyarankan.
Ada beberapa cara untuk melakukannya. Namun, cara tercepat yang saya tahu adalah dengan menggunakan Express.js perpustakaan dengan body-parser.
Yang dapat bekerja untuk string, tapi saya akan mengubah bodyParser.urlencoded untuk bodyParser.json sebaliknya jika POSTING berisi data JSON array.
Info lebih lanjut: http://www.kompulsa.com/how-to-accept-and-parse-post-requests-in-node-js/
Jika anda menggunakan Express.js, sebelum anda dapat mengakses req.tubuh, anda harus menambahkan middleware bodyParser:
Kemudian anda dapat meminta
Dan jika anda don't ingin menggunakan seluruh kerangka seperti Express, tapi anda juga memerlukan berbagai macam bentuk, termasuk upload, kemudian engkau berjanji mungkin menjadi pilihan yang baik.
Hal ini tercantum dalam Node.js modul
Express v4.17.0
Saya menemukan sebuah video yang menjelaskan tentang cara untuk mencapai hal ini: https://www.youtube.com/watch?v=nuw48-u3Yrg
Menggunakan default "http" modul bersama-sama dengan "querystring" dan "stringbuilder" modul. Aplikasi ini mengambil dua angka (menggunakan dua kotak teks) dari suatu halaman web dan setelah submit, kembali jumlah dari dua (bersama dengan bertahan pada nilai-nilai di textbox). Ini adalah contoh terbaik yang bisa saya temukan di tempat lain.
Terkait source code:
Bagi mereka yang menggunakan raw binary POSTING tanggal tanpa encoding overhead yang dapat anda gunakan:
klien:
server: