2013-07-17 46 views
9

Global middleware işlevimi, dokümanlar ve konuyla ilgili her forum gönderisinde açıklandığı şekilde yapılandırabildiğim kadarıyla, çağrılmıyor. Benim yanlış yaptığımı gören var mı? ifade 3.2.5. ardından "rota içinde",ekspres global middleware çağrılmayan

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

Ben "katman içinde" görmeyi beklediğiniz: Günlük çıktısında aşağıdaki bakın. Bunun yerine, sadece "rota içinde" görüyorum.

kodu:

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')); 
}); 

Bu, ilgili mesaj:

Express 3 error middleware not being called

ara katman hata işleme özgüdür. Benimki bir vanilya aracıdır.

+0

Gerekiyor ("yol") ' –

+0

Teşekkürler - çalışma örneğinde yol gereklidir. İhtiyaç ifadelerini postada el ile ekledim (ve şimdi gönderiye yeni eklenen yol). Yol gerekli değilse, kod basitçe patlayacaktır. – Jake

+4

App.router kullanmadan önce bu middleware koyun. – user568109

cevap

21

Aracı yazılımınızı, app.router'u kullanmadan önce koymalısınız.

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

Çok teşekkürler - bu hile yaptı! Paket servisim, uygulamaların rotaları tanımlanmadan önce eklenen son global ara katman olması gerektiğidir. – Jake

+0

Harika! Bu bana çok yardımcı oldu .. – progrrammer

+0

Teşekkürler! Bana yardımcı oldu. –

7

Express 4 kullanıcıları için güncelleştirilen yanıt from the Express 4 docs. Aşağıdaki dokümanlardan örneklere bakın. app.router'un kullanımdan kaldırıldığını ve artık kullanılmadığını unutmayın.

: Ben de net bir sipariş yapmak için bir kukla rota ekledi "Sen son hata işleme ortakatmanını tanımlamak çağrıları diğer app.use() ve güzergahları sonra; Örneğin:

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 
}); 

"