Apabila saya mula belajar Node, saya menemui situasi yang berbeza sama sekali daripada pandangan saya sebelum ini - untuk apa JavaScript digunakan di mata anda? Kesan khas? atau hanya interaksi dengan pelanggan? Ia boleh dikatakan bahawa JavaScript pertama kali dijalankan dalam penyemak imbas Walau bagaimanapun, jika anda memikirkannya dengan cara ini, penyemak imbas hanya memberikan anda konteks (konteks), yang mentakrifkan perkara yang boleh dilakukan menggunakan JavaScript perusahaan yang serupa. Ia mentakrifkan perkara yang boleh anda lakukan di sini, tetapi tidak banyak menerangkan tentang perkara yang boleh dilakukan oleh bahasa JavaScript itu sendiri. Malah, sebagai bahasa yang lengkap, JavaScript boleh digunakan dalam konteks yang berbeza dan mencerminkan keupayaan yang berbeza. Nodejs yang disebut di sini sebenarnya menyediakan konteks, persekitaran berjalan, yang membolehkan kod JavaScript dijalankan pada bahagian belakang (di luar persekitaran penyemak imbas).
Inti pemilihan penghalaan adalah seperti namanya, penghalaan bermakna kami mempunyai kaedah pemprosesan yang berbeza untuk URL yang berbeza, seperti memproses logik perniagaan /mulakan dan memproses perniagaan modul /muat naik adalah tidak konsisten . Dalam pelaksanaan yang realistik, proses penghalaan akan "berakhir" dalam modul penghalaan, dan modul penghalaan bukanlah modul yang sebenarnya "mengambil tindakan" atas permintaan, jika tidak, ia tidak akan tersedia apabila aplikasi kami menjadi lebih kompleks .
Di sini kita mula-mula mencipta modul yang dipanggil requestHandlers dan menambah fungsi pemegang tempat pada setiap pengendali permintaan:
fungsi mula(){
console.log("Permintaan pengendali 'mula' dipanggil.");
Fungsi tidur(milisaat){
var startTime=new Date().getTime();
while(new Date().getTime()
Tidur(10000);
Kembalikan "Hello Start";
}
muat naik fungsi(){
console.log("Pengendali permintaan 'muat naik' telah dipanggil.");
Kembalikan "Hello Upload";
}
exports.start=mula;
exports.upload=upload;
Dengan cara ini, kita boleh menyambungkan pengendali permintaan dan modul penghalaan supaya penghalaan "mempunyai laluan untuk diikuti". Selepas itu, kami menentukan bahawa satu siri pengendali permintaan akan dihantar melalui objek, dan objek ini perlu disuntik ke dalam fungsi penghala() menggunakan kaedah gandingan longgar Indeks fail utama.js:
Salin kod
Kod adalah seperti berikut:
Seperti yang ditunjukkan di atas, memetakan URL yang berbeza kepada pengendali permintaan yang sama adalah mudah: cuma tambahkan sifat dengan kekunci "/" pada objek yang sepadan dengan requestHandlers.start. Dengan cara ini, kita hanya boleh mengkonfigurasi permintaan untuk /mula dan / dikendalikan oleh pengendali permulaan. Selepas melengkapkan definisi objek, kami menghantarnya ke pelayan sebagai parameter tambahan, lihat server.js:
Salin kod
Kod adalah seperti berikut:
var http=require("http");
var url=require("url");
fungsi mula (laluan, pemegang){
Fungsi onRequest(permintaan,tindak balas){
var pathname=url.parse(request.url).pathname;
console.log("Permintaan untuk " nama laluan " diterima.");
laluan(penangan, nama laluan);
response.writeHead(200,{"Content-Type":"text/plain"});
var content=route(handle, pathname);
respons. tulis (kandungan);
response.end();
}
http.createServer(onRequest).listen(8888);
Console.log("Pelayan telah bermula.");
}
exports.start=start;
Dengan cara ini, parameter pemegang ditambahkan pada fungsi start() dan objek pemegang diluluskan sebagai parameter pertama kepada fungsi panggil balik route() Route.js ditakrifkan di bawah:
Salin kod
Kod adalah seperti berikut:
laluan fungsi(pemegang,nama laluan){
Melalui kod di atas, kami mula-mula menyemak sama ada pengendali permintaan yang sepadan dengan laluan yang diberikan wujud, dan jika ia wujud, hubungi terus fungsi yang sepadan. Kita boleh mendapatkan fungsi pemprosesan permintaan daripada objek yang diluluskan dengan cara yang sama seperti mendapatkan elemen daripada tatasusunan bersekutu, iaitu, mengendalikan [nama laluan](); berurusan dengan laluan ini." Kesan larian program adalah seperti berikut: