2013-07-17 24 views
9

Theo tôi có thể nói tôi đang định cấu hình chức năng trung gian toàn cầu của mình như được mô tả trong tài liệu và trong mọi bài đăng trên diễn đàn, nhưng nó không được gọi. Có ai nhìn thấy những gì tôi đang làm sai? thể hiện 3.2.5. Trong bản ghi đầu ra, tôi thấy như sau:thể hiện phần mềm trung gian toàn cầu không được gọi là

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

Tôi hy vọng sẽ thấy "bên trong middleware", sau đó "bên trong tuyến đường". Thay vào đó, tôi chỉ thấy "bên trong tuyến đường".

Mã:

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

bài liên quan này:

Express 3 error middleware not being called

là cụ thể trong kiểm soát lỗi middleware. Mine là một phần mềm trung gian vani.

+0

Bạn cần 'require (" path ")' –

+0

Cảm ơn - đường dẫn được yêu cầu trong ví dụ làm việc. Tôi đã thêm câu lệnh yêu cầu bằng tay trong bài đăng (và thêm đường dẫn ngay bây giờ vào bài đăng). Nếu đường dẫn không được yêu cầu, mã sẽ đơn giản phát nổ. – Jake

+4

Đặt phần mềm trung gian đó trước khi bạn sử dụng app.router – user568109

Trả lời

21

Bạn nên đặt phần mềm trung gian của mình trước khi sử dụng app.router.

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

Cảm ơn rất nhiều - điều này đã làm các trick! Takeaway của tôi là app.router phải là phần mềm trung gian toàn cầu cuối cùng được thêm vào trước khi xác định các tuyến đường. – Jake

+0

Tuyệt vời !! Điều đó đã giúp tôi quá .. – progrrammer

+0

Cảm ơn !! Nó đã giúp đỡ tôi. –

7

Câu trả lời cập nhật cho người dùng Express 4 from the Express 4 docs. Xem ví dụ từ tài liệu bên dưới. Lưu ý rằng app.router không được dùng nữa và không còn được sử dụng nữa. Tôi cũng đã thêm một tuyến đường giả để làm cho trật tự rõ ràng:

"Bạn định nghĩa middleware lỗi xử lý cuối cùng, sau khi app.use khác() và các tuyến đường gọi; Ví dụ:

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

"

Các vấn đề liên quan