中間件與路由處理器
阿新 • • 發佈:2017-07-26
如果 sse get 參數 use 技術 nbsp 就會 客戶
});
app.use(function(req, res, next){
console.log(‘SOMETIMES‘);
next();
});
//錯誤處理中間件
app.use(function(err, req, res, next){
console.log(‘unhandled error detected: ‘ + err.message);
res.send(‘500 - server error‘);
});
app.use(function(req, res){
console.log(‘route not handled‘);
res.send(‘404 - not found‘);
});
app.listen(3000, function(){
console.log(‘listening on 3000‘);
});
});
app.get(‘/a‘, function(req, res){
console.log(‘/a: never called‘);
});
app.use(function(req, res, next){
console.log(‘SOMETIMES‘);
next();
});
//錯誤處理中間件
app.use(function(err, req, res, next){
console.log(‘unhandled error detected: ‘ + err.message);
res.send(‘500 - server error‘);
});
app.use(function(req, res){
console.log(‘route not handled‘);
res.send(‘404 - not found‘);
});
app.listen(3000, function(){
console.log(‘listening on 3000‘);
});
路由處理器和中間件的參數中都有回調函數,這個函數有2個3個或4個參數。
如果有2個或3個參數,前兩個參數是請求和響應對象,第三個參數是next函數。
如果有4個參數,它就變成了錯誤處理中間件,第一個參數變成了錯誤對象,然後依次是請求、響應和next對象。
如果不調用next(),管道就會被終止,也不會再有處理器或中間件做後續處理,此時應該發送一個響應到客戶端。
var app = require(‘express‘)(); let i=1; app.use(function(req, res, next){ console.log(‘\nALLWAYS‘+i++); next(); }); app.get(‘/a‘, function(req, res){ console.log(‘/a: route terminated‘); res.send(‘a‘);
var app = require(‘express‘)(); let i=1; app.use(function(req, res, next){ console.log(‘\nALLWAYS‘+i++); next(); }); app.get(‘/b‘, function(req, res, next){ console.log(‘/b: route not terminated‘); next(); }); app.use(function(req, res, next){ console.log(‘SOMETIMES‘); next(); }); app.get(‘/b‘, function(req, res, next){ console.log(‘/b (part 2): error thrown‘ ); throw new Error(‘b failed‘); }); app.use(‘/b‘, function(err, req, res, next){ console.log(‘/b error detected and passed on‘); next(err); }); //錯誤處理中間件 app.use(function(err, req, res, next){ console.log(‘unhandled error detected: ‘ + err.message); res.send(‘500 - server error‘); }); app.use(function(req, res){ console.log(‘route not handled‘); res.send(‘404 - not found‘); }); app.listen(3000, function(){ console.log(‘listening on 3000‘); });
var app = require(‘express‘)(); let i=1; app.use(function(req, res, next){ console.log(‘\nALLWAYS‘+i++); next(); }); app.use(function(req, res, next){ console.log(‘SOMETIMES‘); next(); }); app.get(‘/c‘, function(err, req){ console.log(‘/c: error thrown‘); throw new Error(‘c failed‘); }); app.use(‘/c‘, function(err, req, res, next){ console.log(‘/c: error deteccted but not passed on‘); next(); }); //錯誤處理中間件 app.use(function(err, req, res, next){ console.log(‘unhandled error detected: ‘ + err.message); res.send(‘500 - server error‘); }); app.use(function(req, res){ console.log(‘route not handled‘); res.send(‘404 - not found‘); }); app.listen(3000, function(){ console.log(‘listening on 3000‘); });
中間件與路由處理器