Nota Kajian NodeJS Sambungkan Modul Middleware (2)_node.js
May 16, 2016 pm 04:17 PM1, 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:
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,
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:
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:
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:
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:
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. . . . . .

Artikel Panas

Alat panas Tag

Artikel Panas

Tag artikel panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Adakah nodejs rangka kerja bahagian belakang?

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

Apakah pembolehubah global dalam nodejs

Adakah nodejs bahasa pembangunan bahagian belakang?

Adakah terdapat perbezaan besar antara nodejs dan java?

Mana satu untuk dipilih antara nodejs dan java?

Bagaimana untuk menyambungkan nodejs ke pangkalan data mysql

Bagaimana untuk menggunakan projek nodejs ke pelayan
