Heim > Web-Frontend > js-Tutorial > NodeJS-Studiennotizen Connect Middleware-Modul (2)_node.js

NodeJS-Studiennotizen Connect Middleware-Modul (2)_node.js

WBOY
Freigeben: 2016-05-16 16:17:44
Original
879 Leute haben es durchsucht

1, Eröffnungsanalyse

Hallo zusammen, im heutigen Artikel geht es hauptsächlich um eine Quellcode-Analyseserie zur „Connect“-Middleware und der zugehörigen Hilfs-Middleware. Ich denke, Sie haben auch den vorherigen Artikel gelesen,

Stellt die Verwendung und den Zweck vor, und dieser Artikel dient auch meinem eigenen Interesse, damit die Leser ihn besser verstehen können. Wenn in der Analysephase etwas nicht stimmt, geben Sie mir bitte einige Ratschläge,

Okay! Kommen wir wie immer zur Sache. Schauen wir uns zunächst ein Beispiel an, kombiniert mit einer Einführungsanalyse, wie folgt:

Code kopieren Der Code lautet wie folgt:

var connect = require("./lib/connect") ;
var app = connect.createServer() ;
app.use(connect.static(__dirname "/public",{
maxAge: 0
})) ;
app.use(function(req,res,next){
res.end("Hallo Welt!") ;
})
.listen(8888) ;

Zweitens, zeilenweise Analyse:

(1), die erste Zeile, führt das Modul „connect“ ein, erstellt über connect einen http|https-Server und stellt alle Funktionen des http-Servers bereit.

Mit der Middleware „connect“ können Sie auf vielfältige Weise „Server“ erstellen,

Code kopieren Der Code lautet wie folgt:

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

Wie wird das gemacht? Siehe den Quellcode:

Code kopieren Der Code lautet wie folgt:

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

Mounten Sie „createServer“ in den globalen „exports“, erweitern Sie dann ein „createServer“-Attribut und mounten Sie es erneut. Der Zweck besteht darin, mit der nativen Schreibform kompatibel zu sein,

Erreichen Sie den Zweck des Schaffens auf unterschiedliche Weise. Auch das ist eine Idee, von der jeder in der täglichen Entwicklung lernen kann.

(2) Schauen wir uns die zweite Zeile „connect.createServer“ an und sehen, was sie bewirkt. Sehen Sie sich den folgenden Quellcode an:

Code kopieren Der Code lautet wie folgt:

var HTTPServer = require('./http').Server ,
HTTPSServer = require('./https').Server ;
Funktion createServer() {
if ('object' == typeof arguments[0]) {
Geben Sie den neuen HTTPSServer(arguments[0], Array.prototype.slice.call(arguments, 1));
zurück } sonst {
Geben Sie den neuen HTTPServer(Array.prototype.slice.call(arguments));
zurück }
};

„HTTPSServer“ und „HTTPServer“ sind grundsätzlich gleich, außer dass „HTTPSServer“ die https-Methode kapselt. Bei „createServer“ können Sie auch eine Reihe von Middleware übergeben, die den gleichen Effekt wie die nachfolgende Einführung hat, jedoch nur an das Stammverzeichnis gebunden werden kann.

(3), schauen Sie sich weiterhin die dritte Zeile „app.use()“ an. Was getan wird, sehen Sie sich den folgenden Quellcode an:

Code kopieren Der Code lautet wie folgt:

var Server = exports.Server = function HTTPServer(middleware) {
This.stack = [];
middleware.forEach(function(fn){
This.use(fn);
}, das);
http.Server.call(this, this.handle);
};
/**
  * Von „http.Server.prototype“ erben.
 */
Server.prototype.__proto__ = http.Server.prototype;

„connect“ ist ein vom „http-Server“ geerbter Prototyp, der den requestListener des Servers durch die verwendete Middleware ersetzt.

Verwenden Sie „connect.use(route, handle)“, um jeder Route Middleware hinzuzufügen. Diese Middleware-„Handles“ werden bei jeder „Anfrage“ an „route“ gebunden und in einem „Stapel“ gespeichert angefordert,

Durchlaufen Sie diesen Heap, suchen Sie das „Handle“, das „route“ entspricht, und führen Sie „handle“ aus. Wenn „handle“ schließlich „next()“ aufruft, wird weiterhin das nächste passende „Handle“ gesucht und ausgeführt.

Durch die Kapselung von „handle“ ist es einfach, weitere „Middleware“ basierend auf „connect“ hinzuzufügen.

(4), schauen Sie sich zum Schluss „listen(8888)“ an, was macht es?

Es ist ganz einfach. Durch die Vererbung des zugrunde liegenden Serverobjekts erhält es die Funktion „Listen“, um einen bestimmten Port abzuhören.

 Server.prototype.__proto__ = http.Server.prototype

Das Folgende ist der gesamte Quellcode von „connect.js“. Um Platz zu sparen, wurden alle Kommentare gelöscht, wie unten gezeigt:

Nur um hinzuzufügen:

Code kopieren Der Code lautet wie folgt:

fs.readdirSync(__dirname '/middleware').forEach(function(filename){
if (/.js$/.test(filename)) {
var name = filename.substr(0, filename.lastIndexOf('.'));
exports.middleware.__defineGetter__(name, function(){
         return require('./middleware/' name);
});
}
});

„Exportiert“ das „Middleware“-Objekt und definiert dann in einer Schleife eine Methode für das „Middleware“-Objekt. Diese Methode dient dazu, das .js-Dateimodul direkt in den „Middleware“-Ordner zu laden.

Verwenden Sie: „exports.utils.merge(exports, exports.middleware)“ Dieser Satz exportiert die Methoden in der Middleware direkt.

Drei, um es zusammenzufassen:

(1) Wenn Sie die Designabsicht des Quellcodes verstehen, können Sie die Anwendungsgewinne maximieren.

(2) Wenn Sie sich den Quellcode ansehen, verstehen Sie den Prozess, bevor Sie auf die grammatikalischen Details achten.

(3) Lernen Sie aus den cleveren Implementierungsideen im Quellcode, aber übertreiben Sie nicht das Design, sondern entwerfen Sie um des Designs willen.

(4) Wir werden morgen die zugehörige Middleware weiter analysieren und weiterhin aktualisieren. . . . . .

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage