中间件与路由处理器

路由处理器和中间件的参数中都有回调函数,这个函数有2个3个或4个参数。
若是有2个或3个参数,前两个参数是请求和响应对象,第三个参数是next函数。
若是有4个参数,它就变成了错误处理中间件,第一个参数变成了错误对象,而后依次是请求、响应和next对象。
若是不调用next(),管道就会被终止,也不会再有处理器或中间件作后续处理,此时应该发送一个响应到客户端。express

 1 var app = require('express')();
 2 let i=1;
 3 app.use(function(req, res, next){
 4     console.log('\nALLWAYS'+i++);
 5     next();
 6 });
 7 app.use(function(req, res, next){
 8     console.log('SOMETIMES');
 9     next();
10 });
11 //错误处理中间件
12 app.use(function(err, req, res, next){
13     console.log('unhandled error detected: ' + err.message);
14     res.send('500 - server error');
15 });
16 app.use(function(req, res){
17     console.log('route not handled');
18     res.send('404 - not found');
19 });
20 app.listen(3000, function(){
21     console.log('listening on 3000');
22 });

 

 1 var app = require('express')();
 2 let i=1;
 3 app.use(function(req, res, next){
 4       console.log('\nALLWAYS'+i++);
 5       next();
 6 });
 7 app.get('/a', function(req, res){
 8       console.log('/a: route terminated');
 9       res.send('a');
10 });
11 app.get('/a', function(req, res){
12       console.log('/a: never called');
13 });
14 app.use(function(req, res, next){
15       console.log('SOMETIMES');
16       next();
17 });
18 //错误处理中间件
19 app.use(function(err, req, res, next){
20       console.log('unhandled error detected: ' + err.message);
21       res.send('500 - server error');
22 });
23 app.use(function(req, res){
24       console.log('route not handled');
25       res.send('404 - not found');
26 });
27 app.listen(3000, function(){
28       console.log('listening on 3000');
29 });

 

 1 var app = require('express')();
 2 let i=1;
 3 app.use(function(req, res, next){
 4       console.log('\nALLWAYS'+i++);
 5       next();
 6 });
 7 app.get('/b', function(req, res, next){
 8       console.log('/b: route not terminated');
 9       next();
10 });
11 app.use(function(req, res, next){
12       console.log('SOMETIMES');
13       next();
14 });
15 app.get('/b', function(req, res, next){
16       console.log('/b (part 2): error thrown' );
17       throw new Error('b failed');
18 });
19 app.use('/b', function(err, req, res, next){
20       console.log('/b error detected and passed on');
21       next(err);
22 });
23 //错误处理中间件
24 app.use(function(err, req, res, next){
25       console.log('unhandled error detected: ' + err.message);
26       res.send('500 - server error');
27 });
28 app.use(function(req, res){
29       console.log('route not handled');
30       res.send('404 - not found');
31 });
32 app.listen(3000, function(){
33       console.log('listening on 3000');
34 });

 

 

 1 var app = require('express')();
 2 let i=1;
 3 app.use(function(req, res, next){
 4     console.log('\nALLWAYS'+i++);
 5     next();
 6 });
 7 app.use(function(req, res, next){
 8     console.log('SOMETIMES');
 9     next();
10 });
11 app.get('/c', function(err, req){
12     console.log('/c: error thrown');
13     throw new Error('c failed');
14 });
15 app.use('/c', function(err, req, res, next){
16     console.log('/c: error deteccted but not passed on');
17     next();
18 });
19 //错误处理中间件
20 app.use(function(err, req, res, next){
21     console.log('unhandled error detected: ' + err.message);
22     res.send('500 - server error');
23 });
24 app.use(function(req, res){
25     console.log('route not handled');
26     res.send('404 - not found');
27 });
28 app.listen(3000, function(){
29     console.log('listening on 3000');
30 });

 

相关文章
相关标签/搜索