Heim >Web-Frontend >js-Tutorial >Einführung in die Express.js-Middleware (mit Beispielen)

Einführung in die Express.js-Middleware (mit Beispielen)

不言
不言nach vorne
2019-03-19 10:38:191762Durchsuche

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

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()

Dies ist der neu geschriebene Code:
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);
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():

CALLBACK

app. ) erfordert nur einen Rückruf, während app.all() mehrere Rückrufe durchführen kann.

PATH

app.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:
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/foo
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:

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);
Jetzt sehen wir die Einzigartigkeit der

-Methode und warum sie zur Deklaration von Middleware verwendet wird. app.use()

Lassen Sie uns unseren Beispiel-Site-Code umschreiben:
var 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);
Dieser Artikel ist hier. Weitere spannende Inhalte finden Sie im

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen