2013-07-17 9 views
9

Soweit ich das beurteilen kann konfiguriere ich meine globale Middleware-Funktion wie in den Dokumenten und in jedem Forum Beitrag zu dem Thema beschrieben, aber es wird nicht aufgerufen. Sieht jemand was ich falsch mache? ausdrückliche 3.2.5. In der Protokollausgabe sehe ich folgendes:express global middleware nicht aufgerufen

Express server listening on port 9000 
inside route 
GET/200 7ms - 2b 

Ich erwarte, dass „innerhalb Middleware“, um zu sehen, dann „innerhalb route“. Stattdessen sehe ich nur "Inside Route".

Der Code:

var express = require('express'), http=require('http'), path=require('path'); 

var app = express(); 

app.enable('trust proxy'); 

app.set('port', process.env.PORT || 9000); 
app.set('views', __dirname + '/views'); 
app.set('view engine', 'ejs'); 
app.set('layout', 'layout'); 

app.use(require('express-ejs-layouts')); 
app.use(express.favicon(__dirname + '/public/images/favicon.ico')); 
app.use(express.logger('dev')); 
app.use(express.bodyParser()); 
app.use(express.methodOverride()) 
app.use(express.cookieParser('kfiwknks')); 
app.use(express.session()); 
app.use(app.router); 
app.use(express.static(path.join(__dirname, 'public'))); 

if ('development' == app.get('env')) { 
    app.use(express.errorHandler()); 
} else { 
    app.use(function(err, req, res, next){ 
    console.error (error); 
    res.send (500, "Internal server error"); 
    }); 
} 

app.use (function (req, res, next) { 
    console.log ("inside middleware"); 
    next(); 
}); 

app.get ("/", function (req, res) { 
    console.log ("inside route"); 
    res.send(200); 
}); 

http.createServer(app).listen(app.get('port'), function() { 
    console.log('Express server listening on port ' + app.get('port')); 
}); 

Dieses Ergebniss zu:

Express 3 error middleware not being called

ist spezifisch Umgang mit Middleware auf Fehler. Meine ist eine Vanille Middleware.

+0

Sie müssen '' ( –

+0

) benötigen ("Pfad"). Danke - Pfad ist im Arbeitsbeispiel erforderlich. Ich habe die Require-Anweisungen per Hand in den Post eingefügt (und den Pfad gerade erst zum Post hinzugefügt). Wenn Pfad nicht benötigt würde, würde der Code einfach explodieren. – Jake

+4

Setzen Sie diese Middleware, bevor Sie app.router verwenden – user568109

Antwort

21

Sie sollten Ihre Middleware verwenden, bevor Sie app.router verwenden.

+0

Vielen Dank - das hat den Trick! Ich nehme an, dass app.router die letzte globale Middleware sein muss, bevor Routen definiert werden. – Jake

+0

Wunderbar !! Das hat mir auch geholfen. – progrrammer

+0

Danke !! Es hat mir geholfen. –

7

Aktualisierte Antwort für Express 4 Benutzer from the Express 4 docs. Siehe Beispiel aus den unten stehenden Dokumenten. Beachten Sie, dass app.router veraltet ist und nicht mehr verwendet wird. Ich habe auch eine Dummy-Route die Reihenfolge klar zu machen:

"Sie definieren Fehlerbehandlungsmiddleware zuletzt, nach anderen app.use() und leitet Anrufe; Zum Beispiel:

var bodyParser = require('body-parser'); 

app.use(bodyParser()); 
app.get('/', function(req, res) { 
    res.send('hello world'); 
}) 
app.use(function(err, req, res, next) { 
    // logic 
}); 

"

Verwandte Themen