2012-07-04 16 views

Antwort

221

Das App-Objekt wird bei der Erstellung des Express-Servers instanziiert. Es hat eine Middleware Stapel, die in app.configure()(this is now deprecated in version 4.x) angepasst werden kann.

Um Ihre Middleware einzurichten, können Sie app.use(<specific_middleware_layer_here>) für jede Middleware-Schicht aufrufen, die Sie hinzufügen möchten (sie kann für alle Pfade generisch sein oder nur auf bestimmten Pfaden ausgelöst werden) und wird hinzugefügt Ihre Express Middleware-Stack. Middleware-Layer können nacheinander in mehreren Aufrufen von use oder sogar alle gleichzeitig mit einem Aufruf in Reihe hinzugefügt werden. Weitere Informationen finden Sie unter use documentation.

Um ein Beispiel für konzeptionelles Verständnis von Express Middleware zu geben, hier ist das, was mein app-Middleware-Stack (app.stack) aussieht, wenn auf die Konsole als JSON meines app Objekts Anmeldung:

stack: 
    [ { route: '', handle: [Function] }, 
    { route: '', handle: [Function: static] }, 
    { route: '', handle: [Function: bodyParser] }, 
    { route: '', handle: [Function: cookieParser] }, 
    { route: '', handle: [Function: session] }, 
    { route: '', handle: [Function: methodOverride] }, 
    { route: '', handle: [Function] }, 
    { route: '', handle: [Function] } ] 

Wie Sie vielleicht in der Lage sein, abzuleiten, rief ich app.use(express.bodyParser()), app.use(express.cookieParser()), etc, die diese Express-Middleware "Schichten" zum Middleware-Stack hinzugefügt. Beachten Sie, dass die Routen leer sind, was bedeutet, dass ich beim Hinzufügen dieser Middleware-Schichten angegeben habe, dass sie auf jeder Route ausgelöst werden. Wenn ich einen benutzerdefinierten Middleware-Layer hinzugefügt habe, der nur auf den Pfad /user/:id getriggert wurde, würde dies als Zeichenfolge im Feld route dieses Middleware-Layer-Objekts im obigen Stapelausdruck angezeigt.

Jede Ebene fügt im Wesentlichen eine Funktion hinzu, die speziell für den Fluss durch die Middleware zuständig ist.

z. Indem Sie bodyParser, hinzufügen, stellen Sie sicher, dass Ihr Server eingehende Anfragen über die Express-Middleware verarbeitet. Also, Parsen jetzt den Körper von eingehenden Anfragen ist Teil der Prozedur, die Ihre Middleware bei der Behandlung eingehender Anfragen - alles, weil Sie app.use(bodyParser) aufgerufen hat.

+66

danke. Wäre es für die Expressus-Leute so schwer, dies in ihren API-Dokumenten zu erklären? – ericsoco

+4

Sie sagen also, dass die Daten bei einem Empfang der Anfrage durch diese Parser weitergeleitet werden, bevor sie den eigentlichen Dienst ansprechen, also zum Beispiel: Valid Request-> Authentication-> ProcessesRequest-> ServResponse ** USE ** würde diese Schritte in einer bestimmten Reihenfolge steuern und nicht parallel ausführen? –

+1

So ist App.use() Abhängigkeitsinjektion in Aktion? –

34

use ist eine Methode zum Konfigurieren der Middleware, die von den Routen des Express-HTTP-Serverobjekts verwendet wird. Das Verfahren ist als Teil von Connect definiert, auf dem Express basiert.

+2

Quelle: https://github.com/senchalabs/connect/blob/master/lib/proto.js#L62 –

+3

Und die Online-Dokumentation finden Sie hier: http://www.senchalabs.org/connect/proto.html# app.use –

+0

Wäre es effizient, wenn eine Node-Middleware Objekte instanziiert? Würde das bedeuten, dass bei jeder Anfrage diese Middleware neue Objekte instanziiert? Werden die alten Objekte verworfen? Zum Beispiel 'app.use (function() {var object = neu SomeConstructor; next();})' – CMCDragonkai

8

app.use() wird zum Mounten der Middleware-Funktion oder zum Mounten auf einen angegebenen Pfad verwendet, die Middleware-Funktion wird ausgeführt, wenn der Basispfad übereinstimmt.

Zum Beispiel: wenn Sie app.use verwenden() in indexRouter.js, wie folgt aus:

//indexRouter.js 

var adsRouter = require('./adsRouter.js'); 

module.exports = function(app) { 
    app.use('/ads', adsRouter); 
} 

In dem obigen Code app.use() den Pfad Montage auf ‚/ Anzeigen 'zu adsRouter.js.

Jetzt in adsRouter.js

// adsRouter.js 

var router = require('express').Router(); 
var controllerIndex = require('../controller/index'); 
router.post('/show', controllerIndex.ads.showAd); 
module.exports = router; 

in adsRouter.js, der Pfad wird für Anzeigen- "/ ads/show" so sein, und dann wird es nach controllerIndex.ads.showAd() funktionieren.

app.use ([Pfad], Rückruf, [Rückruf]): wir einen Rückruf auf dem gleichen hinzufügen können.

app.use('/test', function(req, res, next) { 

    // write your callback code here. 

    }); 
+0

Gut erklärt. Danke –

+0

Willkommen @ Dushyant Joshi –

1

app.use() funktioniert wie folgt aus:

  1. anfordern Ereignis trigered auf Knoten HTTP-Server-Instanz.
  2. Express macht einige seiner inneren Manipulation mit Requ Objekt.
  3. Dies ist, wenn Express beginnt Dinge, die Sie mit app.use angegeben

die sehr einfach.

Und nur dann Express wird den Rest des Zeug wie Routing tun.

1

Middleware ist eine allgemeine Bezeichnung für die Software, die auf „zusammenkleben“ dient, so app.use Verfahren ist die Middleware, beispielsweise zu konfigurieren: zu analysieren und den Körper der Anfrage Griff: app.use (bodyParser. urlencodiert ({extended: true})); app.use (bodyParser.json()); gibt es viele Middle Sie in Ihrer ausdrücklichen Anwendung verwenden können nur das Dokument lesen: http://expressjs.com/en/guide/using-middleware.html

10

Jede app.use (Middleware) wird jedes Mal, wenn eine Anforderung aufgerufen an den Server gesendet wird.

0

Binden Sie Middleware auf Anwendungsebene mithilfe der app.use() - und app.METHOD() - Funktionen an eine Instanz des Anwendungsobjekts, wobei METHOD die HTTP-Methode der Anforderung ist, die von der Middleware-Funktion verarbeitet wird (z. B. GET , PUT oder POST) in Kleinbuchstaben.

0

In Express, wenn wir importieren Express von "Express" und verwenden Sie app = express(); dann App alle Funktionen von Express-

haben, wenn wir app.use() verwenden

mit jedem Modul/Middleware-Funktion ganz express Projekt

Verwandte Themen