Rumah > hujung hadapan web > tutorial js > Cipta pelayan nodejs dengan mudah (10): Mengendalikan POST requests_node.js

Cipta pelayan nodejs dengan mudah (10): Mengendalikan POST requests_node.js

WBOY
Lepaskan: 2016-05-16 16:25:42
asal
1238 orang telah melayarinya

Setakat ini, pelayan yang kami bina tidak mempunyai kegunaan praktikal Seterusnya, kami akan mula melaksanakan beberapa fungsi yang sebenarnya berguna.

Apa yang kami mahu lakukan ialah: pengguna memilih fail, memuat naik fail dan kemudian melihat fail yang dimuat naik dalam penyemak imbas.

Mula-mula kami memerlukan kawasan teks untuk pengguna memasukkan kandungan, dan kemudian menyerahkannya kepada pelayan melalui permintaan POST.

Kami menambah kod dalam pengendali acara mula dan mengubah suai requestHandlers.js seperti berikut:

Salin kod Kod adalah seperti berikut:

fungsi mula(tindak balas) {
console.log("Permintaan pengendali 'mula' dipanggil.");
var body = '' ''
''
'
'
''
'
'
''
''
'
'
''
'';
response.writeHead(200, {"Content-Type": "text/html"});
respons.write(body);
response.end();
}
muat naik fungsi(tindak balas) {
console.log("Pengendali permintaan 'muat naik' telah dipanggil.");
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Hello Upload");
response.end();
}
exports.start = mula;
exports.upload = muat naik;

Anda boleh melihat kesannya dengan melawati http://localhost:8888/start dalam penyemak imbas anda.

Seterusnya kita perlu melaksanakan pengendali permintaan /upload untuk mencetuskan permintaan POST apabila pengguna menyerahkan borang.

Untuk menjadikan keseluruhan proses tidak disekat, Node.js akan membahagikan data POST kepada banyak ketulan data kecil, dan kemudian menghantar ketulan data kecil ini kepada fungsi panggil balik dengan mencetuskan peristiwa tertentu. Peristiwa khusus di sini termasuk peristiwa data (menunjukkan bahawa blok data kecil baharu telah tiba) dan acara tamat (menunjukkan bahawa semua data telah diterima).

Kami melakukan ini dengan mendaftarkan pendengar pada objek permintaan. Objek permintaan di sini dihantar ke fungsi panggil balik onRequest setiap kali permintaan HTTP diterima.

Kami meletakkan kod dalam pelayan dan mengubah suai server.js seperti berikut:

Salin kod Kod adalah seperti berikut:

var http = memerlukan("http");
var url = memerlukan("url");
mulakan fungsi(laluan, pemegang) {
fungsi onRequest(permintaan, respons) {
var postData = "";
var pathname = url.parse(request.url).pathname;
console.log("Permintaan untuk " nama laluan " diterima.");
request.setEncoding("utf8");
request.addListener("data", function(postDataChunk) {
PostData = postDataChunk;
console.log("Terima bahagian data POST '" postDataChunk "'.");
});
request.addListener("end", function() {
laluan(pengendali, nama laluan, respons, postData);
});
}
http.createServer(onRequest).listen(8888);
console.log("Pelayan telah bermula.");
}
exports.start = mula;

Kod di atas melakukan tiga perkara: Pertama, kami menetapkan format pengekodan data yang diterima kepada UTF-8, dan kemudian mendaftarkan pendengar untuk acara "data" untuk mengumpul setiap blok data baharu yang diterima, dan Berikannya kepada pembolehubah postData Akhir sekali, kami mengalihkan panggilan penghalaan permintaan ke pengendali acara akhir untuk memastikan ia hanya menyala apabila semua data telah diterima, dan hanya sekali. Kami juga menghantar data POST ke penghala permintaan, kerana data ini akan digunakan oleh pengendali permintaan.

Seterusnya, pada halaman /upload, kandungan yang dimasukkan oleh pengguna dipaparkan

Jom tukar router.js:

Salin kod Kod adalah seperti berikut:

laluan fungsi(pengendali, nama laluan, respons, data pos) {
console.log("Tentang menghalakan permintaan untuk " nama laluan);
if (jenis pemegang[nama laluan] === 'fungsi') {
handle[pathname](respons, postData);
} lain {
console.log("Tiada pengendali permintaan ditemui untuk " nama laluan);
response.writeHead(404, {"Content-Type": "text/plain"});
response.write("404 Tidak dijumpai");
response.end();
}
}
exports.route = laluan;

Kemudian, dalam requestHandlers.js, kami memasukkan data dalam respons kepada permintaan muat naik:

Salin kod Kod adalah seperti berikut:

fungsi mula(respon, postData) {
console.log("Permintaan pengendali 'mula' dipanggil.");
var body = ''
''
''
'
'
''
'
'
''
''
'
'
''
'';
response.writeHead(200, {"Content-Type": "text/html"});
respons.write(body);
response.end();
}
muat naik fungsi(respons, postData) {
console.log("Pengendali permintaan 'muat naik' telah dipanggil.");
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Anda telah menghantar: " postData);
response.end();
}
exports.start = mula;
exports.upload = muat naik;

Perkara terakhir yang perlu kami lakukan ialah: Pada masa ini kami menghantar keseluruhan kandungan mesej permintaan kepada laluan permintaan dan pengendali permintaan. Kami hanya perlu menghantar bahagian data POST yang menarik minat kami kepada laluan permintaan dan pengendali permintaan. Dalam contoh kami, kami sebenarnya hanya berminat dalam medan teks.

Kita boleh menggunakan modul rentetan pertanyaan yang diperkenalkan sebelum ini:

Salin kod Kod adalah seperti berikut:

var querystring = memerlukan("querystring");
fungsi mula(respon, postData) {
console.log("Permintaan pengendali 'mula' dipanggil.");
var body = ''
''
''
'
'
''
'
'
''
''
'
'
''
'';
response.writeHead(200, {"Content-Type": "text/html"});
respons.write(body);
response.end();
}
muat naik fungsi(respons, postData) {
console.log("Pengendali permintaan 'muat naik' telah dipanggil.");
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Anda telah menghantar teks: " querystring.parse(postData).text);
response.end();
}
exports.start = mula;
exports.upload = muat naik;

Baiklah, itu sahaja tentang memproses data POST.

Dalam bahagian seterusnya, kami akan melaksanakan fungsi muat naik imej.

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan