Diese Übersetzung zur VerfĂŒgung gestellt von StrongLoop / IBM.

Dieses Dokument kann im Vergleich zur englischen Dokumentation veraltet sein. Aktuelle Updates finden Sie in der englischen Dokumentation.

✖

Middleware fĂŒr die Verwendung in Express-Anwendungen schreiben

Überblick

Middlewarefunktionen sind Funktionen, die Zugriff auf das Anforderungsobjekt (req), das Antwortobjekt (res) und die nÀchste Middlewarefunktion im Anforderung/Antwort-Zyklus der Anwendung haben. Die nÀchste Middlewarefunktion wird im Allgemeinen durch die Variable next bezeichnet.

Über Middlewarefunktionen lassen sich die folgenden Tasks ausfĂŒhren:

Wenn ĂŒber die aktuelle Middlewarefunktion der Anforderung/Antwort-Zyklus nicht beendet werden kann, muss next() aufgerufen werden, um die Steuerung an die nĂ€chste Middlewarefunktion zu ĂŒbergeben. Andernfalls geht die Anforderung in den Status “Blockiert” ĂŒber.

Das folgende Beispiel zeigt die Elemente eines Middlewarefunktionsaufrufs:

HTTP-Methode, fĂŒr die die Middlewarefunktion angewendet wird.
Pfad (Weiterleitung), fĂŒr den die Middlewarefunktion angewendet wird.
Die Middlewarefunktion.
Callback-Argument zur Middlewarefunktion, die nach der geltenden Konvention als "next" bezeichnet wird.
HTTP-Antwortargument zur Middlewarefunktion, die nach der geltenden Konvention als "res" bezeichnet wird.
HTTP-Anforderungsargument zur Middlewarefunktion, die nach der geltenden Konvention als "req" bezeichnet wird.

Dies ist ein Beispiel einer einfachen Express-Anwendung namens “Hello World”, fĂŒr die Sie zwei Middlewarefunktionen definieren:


var express = require('express');
var app = express();

app.get('/', function (req, res) {
  res.send('Hello World!');
});

app.listen(3000);

Entwicklung

Dies ist ein einfaches Beispiel einer Middlewarefunktion namens “myLogger”. Diese Funktion gibt lediglich “LOGGED” aus, wenn eine Anforderung zur Anwendung ĂŒber diese Funktion lĂ€uft. Die Middlewarefunktion ist der Variablen myLogger zugeordnet.


var myLogger = function (req, res, next) {
  console.log('LOGGED');
  next();
};

Beachten Sie den Aufruf oben zu next(). Durch den Aufruf dieser Funktion wird die nĂ€chste Middlewarefunktion in der Anwendung aufgerufen. Die Funktion next() ist nicht Teil der Node.js- oder Express-API, sondern das dritte Argument, das an die Middlewarefunktion ĂŒbergeben wird. Die Funktion next() kann jeden beliebigen Namen haben, per Konvention erhĂ€lt sie jedoch immer den Namen “next”. Um Unklarheiten zu vermeiden, sollten Sie immer diese Konvention verwenden.

Zum Laden der Middlewarefunktion rufen Sie app.use() auf und geben die Middlewarefunktion an. Beispiel: Durch den folgenden Code wird die Middlewarefunktion myLogger vor der Weiterleitung zum Stammverzeichnispfad (/) geladen.


var express = require('express');
var app = express();

var myLogger = function (req, res, next) {
  console.log('LOGGED');
  next();
};

app.use(myLogger);

app.get('/', function (req, res) {
  res.send('Hello World!');
});

app.listen(3000);

Sobald die Anwendung eine Anforderung erhĂ€lt, gibt sie die Nachricht “LOGGED” an das Terminal aus.

Die Reihenfolge beim Laden der Middleware ist wichtig: Middlewarefunktionen, die zuerst geladen werden, werden auch zuerst ausgefĂŒhrt.

Wenn myLogger nach der Weiterleitung zum Stammverzeichnispfad geladen wird, erreicht die Weiterleitung die Middlewarefunktion nicht. Die Anwendung gibt “LOGGED” nicht aus, weil der Routenhandler fĂŒr den Stammverzeichnispfad den Anforderung/Antwort-Zyklus beendet.

Die Middlewarefunktion myLogger gibt einfach eine Nachricht aus und ĂŒbergibt dann die Anforderung zur nĂ€chsten Middlewarefunktion im Stack durch Aufruf der Funktion next().

Im nĂ€chsten Beispiel wird die Eigenschaft requestTime zum Anforderungsobjekt hinzugefĂŒgt. Diese Middlewarefunktion erhĂ€lt den Namen “requestTime”.


var requestTime = function (req, res, next) {
  req.requestTime = Date.now();
  next();
};

Die Anwendung verwendet nun die Middlewarefunktion requestTime. Außerdem verwendet die Callback-Funktion der Weiterleitung zum Stammverzeichnispfad die Eigenschaft, die die Middlewarefunktion zu req (dem Anforderungsobjekt) hinzufĂŒgt.


var express = require('express');
var app = express();

var requestTime = function (req, res, next) {
  req.requestTime = Date.now();
  next();
};

app.use(requestTime);

app.get('/', function (req, res) {
  var responseText = 'Hello World!
'; responseText += 'Requested at: ' + req.requestTime + ''; res.send(responseText); }); app.listen(3000);

Wenn Sie eine Anforderung zum Stammverzeichnis der Anwendung einleiten, zeigt die Anwendung nun die Zeitmarke Ihrer Anforderung im Browser an.

Da Sie Zugriff auf das Anforderungsobjekt, das Antwortobjekt, die nÀchste Middlewarefunktion im Stack und die gesamte Node.js-API haben, sind die Möglichkeiten, die Sie mit Middlewarefunktionen haben, nahezu unendlich.

Weitere Informationen zur Verwendung von Middleware in Express siehe Express-Middleware verwenden.