Rumah hujung hadapan web tutorial js Nota Kajian NodeJS Sambungkan Modul Middleware (2)_node.js

Nota Kajian NodeJS Sambungkan Modul Middleware (2)_node.js

May 16, 2016 pm 04:17 PM
connect nodejs perisian tengah nota belajar

1, analisis pembukaan

Helo semua, artikel hari ini terutamanya mengenai siri analisis kod sumber pada perisian tengah "Sambung" dan perisian tengah tambahan yang berkaitan, saya rasa anda juga telah membaca artikel sebelumnya,

Memperkenalkan penggunaan dan tujuan, dan artikel ini juga atas minat saya sendiri, supaya pembaca dapat memahaminya dengan lebih mendalam jika ada yang tidak betul dalam peringkat analisis, sila berikan saya nasihat,

Baiklah! Seperti biasa, mari kita ke intinya. Mari kita lihat contoh, digabungkan dengan analisis pengenalan, seperti berikut:

Salin kod Kod adalah seperti berikut:

var connect = memerlukan("./lib/connect") ;
var app = connect.createServer() ;
app.use(connect.static(__dirname "/public",{
maxUmur: 0
})) ;
app.use(function(req,res,next){
res.end("Hello World!") ;
})
.dengar(8888) ;

2. Analisis baris demi baris:

(1), baris pertama, memperkenalkan modul "sambung", mencipta pelayan http|https melalui sambungan dan menyediakan semua fungsi pelayan http.

Perisian tengah "sambung" membolehkan anda mencipta "pelayan" dalam pelbagai cara,

Salin kod Kod adalah seperti berikut:

pelayan var = connect.createServer(
Connect.logger()
, connect.static(__dirname '/public')
); // 1
var app = connect() ;
app.use(function (req,res) {
res.end("Hello, Nobita!n") ;
}).dengar(8888) ; // 2

Jadi bagaimana ia dilakukan? Lihat kod sumber:

Salin kod Kod adalah seperti berikut:

exports = module.exports = createServer ;
exports.createServer = createServer ;

Lekapkan "createServer" ke "eksport" global, kemudian lanjutkan atribut "createServer" dan lekapkannya semula Tujuannya adalah untuk serasi dengan bentuk tulisan asli,

Mencapai tujuan mencipta dengan cara yang berbeza. Ini juga merupakan idea yang boleh dipelajari oleh semua orang dalam pembangunan harian.

(2) Mari lihat baris kedua "connect.createServer" dan lihat fungsinya Lihat kod sumber di bawah:

Salin kod Kod adalah seperti berikut:

var HTTPServer = memerlukan('./http').Server ,
HTTPSServer = memerlukan('./https').Pelayan ;
function createServer() {
if ('objek' == jenis hujah[0]) {
Kembalikan HTTPSServer baharu(argumen[0], Array.prototype.slice.call(arguments, 1));
} lain {
Kembalikan HTTPServer baharu(Array.prototype.slice.call(arguments));
}
};

"HTTPSServer" dan "HTTPServer" pada asasnya adalah sama, kecuali "HTTPSServer" merangkum kaedah https. Apabila "createServer", anda juga boleh lulus dalam satu siri middleware, yang mempunyai kesan yang sama seperti pengenalan berikutnya, tetapi ia hanya boleh terikat pada direktori root.

(3), teruskan melihat baris ketiga "app.use()", apa yang telah dilakukan, lihat kod sumber berikut:

Salin kod Kod adalah seperti berikut:

var Pelayan = eksport. Pelayan = fungsi HTTPServer(perisian tengah) {
This.stack = [];
middleware.forEach(fungsi(fn){
This.use(fn);
}, ini);
http.Server.call(this, this.handle);
};
/**
  * Warisi daripada `http.Server.prototype`.
 */
Server.prototype.__proto__ = http.Server.prototype;

"connect" ialah prototaip yang diwarisi daripada "server http", ia akan menggantikan requestListener pelayan dengan middleware yang digunakan.

Gunakan "connect.use(route, handle)" untuk menambah middleware pada setiap laluan "handle" middleware ini akan terikat kepada "route" dan disimpan dalam "stack", setiap kali terdapat "request" Bila. diminta,

Lintas timbunan ini, cari "pemegang" yang sepadan dengan "laluan", dan laksanakan "pemegang" Jika "pemegang" akhirnya memanggil "seterusnya()", ia akan terus mencari dan melaksanakan "pemegang" seterusnya.

Dengan merangkumkan "pemegang", anda boleh dengan mudah menambah lebih banyak "persian tengah" berdasarkan "sambung".

(4), akhirnya lihat "dengar(8888)", apakah fungsinya?

Ia sangat mudah Dengan mewarisi objek Pelayan yang mendasari, ia diberikan fungsi "mendengar" untuk mendengar pada port tertentu.

 Server.prototype.__proto__ = http.Server.prototype

Berikut ialah keseluruhan kod sumber "connect.js". Untuk menjimatkan ruang, semua ulasan telah dipadamkan, seperti yang ditunjukkan di bawah:

Hanya untuk menambah:

Salin kod Kod adalah seperti berikut:

fs.readdirSync(__nama nama '/persian tengah').forEach(fungsi(nama fail){
if (/.js$/.test(nama fail)) {
var name = nama fail.substr(0, nama fail.lastIndexOf('.'));
exports.middleware.__defineGetter__(nama, fungsi(){
         return require('./middleware/' name);
});
}
});

"Mengeksport" objek "persian tengah", dan kemudian mentakrifkan kaedah kepada objek "perisian tengah" secara terus Kaedah ini adalah untuk memuatkan terus modul fail .js dalam folder "perisian tengah".

Gunakan: "exports.utils.merge(exports, exports.middleware)" Ayat ini mengeksport kaedah dalam middleware secara langsung.

Tiga, untuk diringkaskan:

(1) Memahami niat reka bentuk kod sumber akan membantu memaksimumkan keuntungan dalam aplikasi.

(2) Apabila melihat kod sumber, fahami proses sebelum memberi perhatian kepada butiran tatabahasa.

(3), belajar daripada idea pelaksanaan yang bijak dalam kod sumber, tetapi jangan terlalu reka bentuk, reka bentuk demi reka bentuk.

(4), kami akan terus menganalisis perisian tengah yang berkaitan esok dan akan terus mengemas kininya. . . . . .

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

Tag artikel panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Adakah nodejs rangka kerja bahagian belakang? Adakah nodejs rangka kerja bahagian belakang? Apr 21, 2024 am 05:09 AM

Adakah nodejs rangka kerja bahagian belakang?

Apakah perbezaan antara fail npm dan npm.cmd dalam direktori pemasangan nodejs? Apakah perbezaan antara fail npm dan npm.cmd dalam direktori pemasangan nodejs? Apr 21, 2024 am 05:18 AM

Apakah perbezaan antara fail npm dan npm.cmd dalam direktori pemasangan nodejs?

Apakah pembolehubah global dalam nodejs Apakah pembolehubah global dalam nodejs Apr 21, 2024 am 04:54 AM

Apakah pembolehubah global dalam nodejs

Adakah nodejs bahasa pembangunan bahagian belakang? Adakah nodejs bahasa pembangunan bahagian belakang? Apr 21, 2024 am 05:09 AM

Adakah nodejs bahasa pembangunan bahagian belakang?

Adakah terdapat perbezaan besar antara nodejs dan java? Adakah terdapat perbezaan besar antara nodejs dan java? Apr 21, 2024 am 06:12 AM

Adakah terdapat perbezaan besar antara nodejs dan java?

Mana satu untuk dipilih antara nodejs dan java? Mana satu untuk dipilih antara nodejs dan java? Apr 21, 2024 am 04:40 AM

Mana satu untuk dipilih antara nodejs dan java?

Bagaimana untuk menyambungkan nodejs ke pangkalan data mysql Bagaimana untuk menyambungkan nodejs ke pangkalan data mysql Apr 21, 2024 am 06:13 AM

Bagaimana untuk menyambungkan nodejs ke pangkalan data mysql

Bagaimana untuk menggunakan projek nodejs ke pelayan Bagaimana untuk menggunakan projek nodejs ke pelayan Apr 21, 2024 am 04:40 AM

Bagaimana untuk menggunakan projek nodejs ke pelayan

See all articles