2013-07-17 15 views
9

नहीं कहा जा रहा है, जहां तक ​​मैं कह सकता हूं कि मैं दस्तावेज़ों में वर्णित अनुसार और विषय पर प्रत्येक फोरम पोस्ट में बताए गए अपने वैश्विक मिडलवेयर फ़ंक्शन को कॉन्फ़िगर कर रहा हूं, लेकिन इसे नहीं कहा जा रहा है। क्या कोई देखता है कि मैं क्या गलत कर रहा हूं? एक्सप्रेस 3.2.5। लॉग आउटपुट में मैं निम्नलिखित देखता हूं:एक्सप्रेस ग्लोबल मिडलवेयर को

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

मुझे "अंदरूनी मिडलवेयर", फिर "मार्ग के अंदर" देखने की उम्मीद है। इसके बजाय, मैं बस "मार्ग के अंदर" देखता हूं।

कोड:

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

यह संबंधित पोस्ट:

Express 3 error middleware not being called

मिडलवेयर से निपटने त्रुटि के लिए विशिष्ट है। मेरा एक वेनिला मिडलवेयर है।

+0

आपको '("पथ") की आवश्यकता है ' –

+0

धन्यवाद - कार्य उदाहरण में पथ आवश्यक है। मैंने पद में हाथ से आवश्यक बयानों को जोड़ा (और अभी पोस्ट में जोड़ा गया पथ)। यदि पथ की आवश्यकता नहीं थी, तो कोड बस उड़ाएगा। – Jake

+4

ऐप का उपयोग करने से पहले उस मिडलवेयर को रखें .router – user568109

उत्तर

21

app.router का उपयोग करने से पहले आपको अपना मिडलवेयर रखना चाहिए।

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

बहुत बहुत धन्यवाद - यह चाल है! मेरा टेकवे यह है कि ऐप.उंटर को मार्गों को परिभाषित करने से पहले आखिरी वैश्विक मिडलवेयर होना चाहिए। – Jake

+0

अद्भुत !! इससे मुझे भी मदद मिली .. – progrrammer

+0

धन्यवाद !! यह मेरी मदद की। –

7

एक्सप्रेस 4 उपयोगकर्ताओं from the Express 4 docs के लिए अद्यतन उत्तर। नीचे दिए गए दस्तावेज़ों से उदाहरण देखें। ध्यान दें कि app.router बहिष्कृत है और अब उपयोग नहीं किया गया है।

: मैं भी आदेश स्पष्ट करना एक डमी मार्ग कहा, "आपको त्रुटि हैंडलिंग मिडलवेयर पिछले परिभाषित करते हैं, अन्य app.use() और मार्गों के बाद कॉल; उदाहरण के लिए:

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

"

संबंधित मुद्दे