Der Inhalt dieses Artikels ist eine Einführung in die Middleware von express.js (mit Beispielen). Freunde in Not können darauf verweisen.
Neue Express-Entwickler sind oft verwirrt über den Unterschied zwischen Routenhandlern und Middleware. Daher sind sie auch verwirrt über den Unterschied zwischen den Methoden app.use(), app.all(), app.get(), app.post(), app.delete() und app.put().
In diesem Artikel erkläre ich den Unterschied zwischen Middleware und Routenhandlern. Und wie man die Methoden app.use(), app.all(), app.get(), app.post(), app.delete() und app.put() richtig verwendet.
Routenverarbeitung
app.use(), app.all(), app.get(), app.post(), app.delete() und app.put() alle Wird zum Definieren von Routen verwendet. Diese Methoden werden zum Definieren von Routen verwendet. Routing wird zur Verarbeitung von HTTP-Anfragen verwendet. Eine Route ist eine Kombination aus einem Pfad und einem Rückruf, die ausgeführt wird, wenn der angeforderte Pfad übereinstimmt. Rückrufe werden Routenhandler genannt.
Der Unterschied zwischen ihnen besteht in der Verarbeitung verschiedener Arten von HTTP-Anfragen. Beispiel: Die Methode app.get() verarbeitet nur Get-Anfragen, während app.all() GET-, POST- und andere Anfragen verarbeitet.
Hier ist ein Beispiel für die Definition einer Route:
var app = require("express")(); app.get("/", function(req, res, next){ res.send("Hello World!!!!"); }); app.listen(8080);
Jeder Routenhandler erhält einen Verweis auf die Anforderungs- und Antwortobjekte für die aktuell bediente HTTP-Anfrage.
Für eine einzelne HTTP-Anfrage können mehrere Routenhandler ausgeführt werden. Hier ist ein Beispiel:
var app = require("express")(); app.get("/", function(req, res, next){ res.write("Hello"); next(); }); app.get("/", function(req, res, next){ res.write(" World !!!"); res.end(); }); app.listen(8080);
Hier schreibt der erste Handler eine Antwort und ruft dann next()
auf. Mit der Methode next()
wird der nächste Routenhandler aufgerufen, der dem Routenpfad entspricht.
Der Routenhandler muss die Anfrage beenden oder den nächsten Routenhandler anrufen.
Wir können auch mehrere Routenhandler an die Methoden app.all()
, app.get()
, app.post()
, app.delete()
und app.put()
übergeben.
Hier ist ein Beispiel, das dies demonstriert:
var app = require("express")(); app.get("/", function(req, res, next){ res.write("Hello"); next(); }, function(req, res, next){ res.write(" World !!!"); res.end(); }); app.listen(8080);
Middleware ist ein Callback, der über dem eigentlichen Request-Handler sitzt. Es verwendet dieselben Parameter wie der Routenhandler.
Um die Middleware zu verstehen, schauen wir uns eine Beispielsite mit den Seiten dashboard
und profile
an. Um auf diese Seiten zugreifen zu können, müssen Benutzer angemeldet sein. Anfragen für diese Seiten werden ebenfalls protokolliert.
Hier ist der Code für den Routenhandler für diese Seiten:
var app = require("express")(); function checkLogin(){ return false; } function logRequest(){ console.log("New request"); } app.get("/dashboard", function(req, res, next){ logRequest(); if(checkLogin()){ res.send("This is the dashboard page"); } else{ res.send("You are not logged in!!!"); } }); app.get("/profile", function(req, res, next){ logRequest(); if(checkLogin()){ res.send("This is the dashboard page"); } else{ res.send("You are not logged in!!!"); } }); app.listen(8080);
Das Problem hierbei ist, dass es viel doppelten Code gibt, d. h. wir müssen logRequest()
und Funktioniert mehrfach. Dies erschwert auch die Aktualisierung des Codes. Um dieses Problem zu lösen, können wir einen gemeinsamen Pfad für beide Pfade schreiben. checkLogin()
Der Code hier sieht sauberer aus und ist einfacher zu warten und zu aktualisieren. Die ersten beiden definierten Route-Handler werden hier als Middleware bezeichnet, da sie keine Anfragen verarbeiten, sondern für die Vorverarbeitung von Anfragen zuständig sind. Express stellt uns die Methode app.use() zur Verfügung, die speziell zum Definieren von Middleware verwendet wird. Die Methode app.use() sieht möglicherweise ähnlich wie app.all() aus, es gibt jedoch viele Unterschiede zwischen ihnen, die app.use() gut für die Deklaration von Middleware geeignet machen. Sehen wir uns an, wie die Methode app.use() funktioniert: Der Unterschied zwischen app.use() und app.all():CALLBACKapp. ) erfordert nur einen Rückruf, während app.all() mehrere Rückrufe durchführen kann. PATHapp.use() prüft nur, ob die URL mit dem angegebenen Pfad beginnt, und app.all() stimmt mit dem vollständigen Pfad überein. Hier ein Beispiel zur Veranschaulichung:var app = require("express")(); function checkLogin(){ return false; } function logRequest(){ console.log("New request"); } app.get("/*", function(req, res, next){ logRequest(); next(); }) app.get("/*", function(req, res, next){ if(checkLogin()){ next(); } else{ res("You are not logged in!!!"); } }) app.get("/dashboard", function(req, res, next){ res.send("This is the dashboard page"); }); app.get("/profile", function(req, res, next){ res.send("This is the dashboard page"); }); app.listen(8080);Nach dem Login kopieren
NEXT()next() innerhalb einer Middleware ruft je nach Schnittstelle die nächste Middleware oder den nächsten Routenhandler auf unten zu erklären. Aber next() im Routenhandler ruft nur den nächsten Routenhandler auf. Wenn es als nächstes Middleware gibt, überspringen Sie diese. Daher muss Middleware vor allen Routenhandlern deklariert werden. Hier ist ein Beispiel zur Veranschaulichung:app.use( "/product" , mymiddleware); // will match /product // will match /product/cool // will match /product/foo app.all( "/product" , handler); // will match /product // won't match /product/cool <-- important // won't match /product/foo <-- important app.all( "/product/*" , handler); // won't match /product <-- Important // will match /product/cool // will match /product/fooNach dem Login kopieren
var express = require('express'); var app = express(); app.use(function frontControllerMiddlewareExecuted(req, res, next){ console.log('(1) this frontControllerMiddlewareExecuted is executed'); next(); }); app.all('*', function(req, res, next){ console.log('(2) route middleware for all method and path pattern "*", executed first and can do stuff before going next'); next(); }); app.all('/hello', function(req, res, next){ console.log('(3) route middleware for all method and path pattern "/hello", executed second and can do stuff before going next'); next(); }); app.use(function frontControllerMiddlewareNotExecuted(req, res, next){ console.log('(4) this frontControllerMiddlewareNotExecuted is not executed'); next(); }); app.get('/hello', function(req, res){ console.log('(5) route middleware for method GET and path patter "/hello", executed last and I do my stuff sending response'); res.send('Hello World'); }); app.listen(80);
-Methode und warum sie zur Deklaration von Middleware verwendet wird. app.use()
Dieser Artikel ist hier. Weitere spannende Inhalte finden Sie imvar app = require("express")(); function checkLogin(){ return false; } function logRequest(){ console.log("New request"); } app.use(function(req, res, next){ logRequest(); next(); }) app.use(function(req, res, next){ if(checkLogin()){ next(); } else{ res.send("You are not logged in!!!"); } }) app.get("/dashboard", function(req, res, next){ res.send("This is the dashboard page"); }); app.get("/profile", function(req, res, next){ res.send("This is the dashboard page"); }); app.listen(8080);Nach dem Login kopieren
JavaScript-Video auf der PHP-Chinese-Website-Tutorial Kolumne!
Das obige ist der detaillierte Inhalt vonEinführung in die Express.js-Middleware (mit Beispielen). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!