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

WBOY
Lepaskan: 2016-05-16 16:17:44
asal
845 orang telah melayarinya

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. . . . . .

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