1. Öffnungsanalyse
Hallo allerseits, der heutige Artikel konzentriert sich hauptsächlich auf eine Quellcode -Analyse -Serie für "Connect" Middleware und zugehörige Hilfsmittel -Middleware. Ich denke, jeder hat den vorherigen Artikel gelesen.
Dieser Artikel stellt die Nutzungsmethode und den Zweck vor, und dieser Artikel ist auch nicht in meinem eigenen Interesse heraus, damit die Leser ein tieferes Verständnis dafür haben können. Wenn in der Analysephase irgendwelche Unrechtmäßigkeit enthält, geben Sie mir bitte einige Ratschläge.
In Ordnung! Kommen wir zum Punkt der alten Regeln. Schauen wir uns zuerst ein Beispiel an und verwenden Sie die Einführungsanalyse in Kombination wie folgt:
Die Codekopie lautet wie folgt:
var Connect = Request ("./ 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);
2. Linienanalyse: Linienanalyse:
(1), die erste Zeile, stellen Sie das "Connect" -Modul ein, erstellen Sie einen HTTP | HTTPS -Server über Connect und geben Sie alle Funktionen des HTTP -Servers an.
Mit der Middleware "Connect" können Sie "Server" auf verschiedene Weise erstellen.
Die Codekopie lautet wie folgt:
var server = connect.createServer (
Connect.logger ()
, Connect.static (__ Dirname + '/public')
); // 1
var app = connect ();
app.use (Funktion (req, res) {
res.end ("Hallo, Nobita!/n");
}). Hören (8888); // 2
Also, wie es das macht, schauen Sie sich den Quellcode an:
Die Codekopie lautet wie folgt:
exports = module.exports = createServer;
exports.createServer = createsServer;
Mount "CreateServer" auf den globalen "Exporten", erweitern Sie dann ein "CreatesServer" -attribut und montieren es erneut. Der Zweck ist, mit dem nativen Schreibformular kompatibel zu sein.
Der Zweck der Schaffung verschiedener Wege wurde erreicht. Dies ist auch eine Idee, von der jeder in seiner täglichen Entwicklung lernen kann.
(2) Schauen wir uns die zweite Zeile "Connect.CreateServer" an. Was hat es getan, schauen Sie sich den Quellcode unten an:
Die Codekopie lautet wie folgt:
var httpserver = required ('./ http'). Server,
HttpSserver = required ('./ https'). Server;
Funktion createServer () {
if ('object' == Typeof Argumente [0]) {
Neue httpSserver zurückgeben (Argumente [0], Array.Prototype.lice.call (Argumente, 1));
} anders {
Neue httpserver zurückgeben (Array.Prototype.slice.call (Argumente));
}
};
"HttpSserver" und "httpserver" sind im Grunde genommen gleich, sie sind nur die von "httpSserver" eingekapsierte HTTPS -Methode. Wenn "createsServer" eine Reihe von Middleware übergeben werden kann, was der nachfolgenden Einführung entspricht, aber nur an das Stammverzeichnis gebunden sein kann.
(3) Schauen Sie sich weiterhin die dritte Zeile "App.Use ()" an, was es getan hat, den Quellcode wie folgt:
Die Codekopie lautet wie folgt:
var server = expors.server = function httpServer (Middleware) {
this.stack = [];
Middleware.foreach (Funktion (fn) {
this.use (fn);
}, Das);
http.server.call (this, this.handle);
};
/**
* Erben von `http.server.prototype`.
*/
Server.prototype .__ proto__ = http.server.prototype;
"Connect" ist der von "HTTP Server" geerbte Prototyp, der den RequestListener des Servers durch die von Ihnen verwendete Middleware ersetzt.
Verwenden Sie "Connect.use (Route, Handle)", um jeder Route Middleware hinzuzufügen. Der "Griff" dieser Middleware wird an "Route" gebunden und in einem "Stapel" gespeichert. Jedes Mal, wenn es eine "Anfrage" -Anfrage gibt,
Durchqueren Sie diesen Haufen, finden Sie den "Griff", der der "Route" entspricht, und führen Sie "Handle" aus. Wenn "Handle" endlich "Next ()" aufruft, wird es weiterhin den nächsten Übereinstimmungs "Handle" durchsuchen und ausführen.
Durch das Einkapseln von "Handle" ist es einfach, "Middleware" zu "Verbindung" hinzuzufügen.
(4), schauen Sie sich endlich "Hören (8888)", welche Art von Arbeit macht es?
Es ist sehr einfach. Durch die Erben des zugrunde liegenden Serverobjekts gibt es die Funktion von "Hören", um auf bestimmte Ports anzuhö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 in der folgenden Abbildung gezeigt:
Hinzufügen:
Die Codekopie lautet wie folgt:
fs.readdirsync (__ Dirname + '/Middleware'). foreach (Funktion (Dateiname) {
if (//.js$/.test(FileName)) {
var name = Dateiname.substr (0, Dateiname.lastIndexof ('.'));
exports.middleware .__ DefineGetter __ (Name, function () {
Rückgabeanforderung ('./ Middleware/' + Name);
});
}
});
Das "Middleware" -Objekt "exportiert" und schleifen dann zum "Middleware" -Objekt eine Methode, die das .js -Dateimodul direkt im Ordner "Middleware" lädt.
Verwendung: "exports.utils.Merge (exports, exports.middleware)", um die Methoden direkt in Middleware zu exportieren.
Drei, lassen Sie uns zusammenfassen:
(1) Das Verständnis der Entwurfsabsicht des Quellcodes hilft, die Gewinne in der Anwendung zu maximieren.
(2) Wenn Sie sich den Quellcode ansehen, verstehen Sie den Prozess und ziehen Sie dann grammatikalische Details ab.
(3) Lernen Sie aus den cleveren Implementierungsideen im Quellcode, aber kein Übergangsdesign, Design für das Design.
(4) analysieren Sie morgen weiterhin relevante Middleware und werden weiter aktualisiert. . . . . .