Rumah  >  Artikel  >  hujung hadapan web  >  Buat pelayan nodejs (9) dengan mudah: Laksanakan operasi tanpa sekatan_node.js

Buat pelayan nodejs (9) dengan mudah: Laksanakan operasi tanpa sekatan_node.js

WBOY
WBOYasal
2016-05-16 16:25:521395semak imbas

Kami ingin menghantar objek respons (diperolehi daripada fungsi panggil balik pelayan onRequest()) kepada pengendali permintaan melalui laluan permintaan. Pengendali kemudian boleh bertindak balas kepada permintaan menggunakan fungsi pada objek itu.

Mari kita buat perubahan pada server.js dahulu:

Salin kod Kod adalah seperti berikut:

var http = memerlukan("http");
var url = memerlukan("url");
mulakan fungsi(laluan, pemegang) {
fungsi onRequest(permintaan, respons) {
var pathname = url.parse(request.url).pathname;
console.log("Permintaan untuk " nama laluan " diterima."); laluan(penangan, nama laluan, respons); }
http.createServer(onRequest).listen(8888);
console.log("Pelayan telah bermula.");
}
exports.start = mula;


Kami menghantar objek tindak balas sebagai parameter ketiga kepada fungsi route(), dan kami mengalih keluar semua panggilan fungsi berkaitan respons dalam pengendali onRequest(), kerana kami mahu bahagian kerja ini dilakukan oleh laluan( ) berfungsi untuk melengkapkan.

Ubah suai router.js seterusnya:

laluan fungsi(pemegang, nama laluan, respons) {
console.log("Tentang menghalakan permintaan untuk " nama laluan);
if (jenis pemegang[nama laluan] === 'fungsi') {
mengendalikan[pathname](respons);
} 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;


Corak yang sama: daripada mendapatkan nilai pulangan daripada pengendali permintaan, kali ini objek respons dihantar terus. Jika tiada pemproses permintaan yang sepadan untuk diproses, kami akan terus mengembalikan ralat "404".

Seterusnya ubah suai requestHandler.js:

var exec = memerlukan("proses_anak").exec;
fungsi mula(tindak balas) {
console.log("Permintaan pengendali 'mula' dipanggil.");
exec("ls -lah", fungsi (ralat, stdout, stderr) {
response.writeHead(200, {"Content-Type": "text/plain"});
response.write(stdout);
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;


Fungsi pengendali kami perlu menerima parameter respons untuk bertindak balas terus kepada permintaan. Pengendali permulaan melakukan operasi respons permintaan dalam fungsi panggil balik tanpa nama exec(), manakala pengendali muat naik masih hanya membalas "Hello World", tetapi kali ini ia menggunakan objek respons.

Jika anda ingin membuktikan bahawa operasi yang memakan masa dalam pengendali /start tidak akan menyekat respons segera kepada permintaan /upload, anda boleh mengubah suai requestHandlers.js kepada borang berikut:

var exec = memerlukan("proses_anak").exec;
fungsi mula(tindak balas) {
console.log("Permintaan pengendali 'mula' dipanggil.");
exec("cari /",
{ tamat masa: 10000, maxBuffer: 20000*1024 },
fungsi (ralat, stdout, stderr) {
response.writeHead(200, {"Content-Type": "text/plain"});
response.write(stdout);
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;

Auf diese Weise dauert das Laden bei der Anfrage von http://localhost:8888/start 10 Sekunden, bei der Anfrage von http://localhost:8888/upload antwortet es jedoch sofort, auch wenn /start Die Antwort wird derzeit noch bearbeitet.

Kenyataan:
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