Nodejs中express中间件详细介绍

Express中间件

中间件的概念

从请求发送至服务器到服务端处理完后响应,分步骤来处理,那么每一个步骤就是一个中间件,就像工厂的流水线工作原理一样,产品需要分多个步骤来加工,那么每一道工序就是一个中间件

  • 一个中间件本质就是一个处理函数(参数:request请求对象、response响应对象、next下一个中间件)
  • 一个请求所匹配的中间件函数中所有request、response都是同一个对象
var express = require('express');
var app = express();
app.get('/index',function(req,res,next){
	// 同一个请求的req和res是一样的,
	// 可以前面存储下面用
	req.foo = 'bar';
	next();
});
app.get('/index',function(req,res,next){
	console.log(req.body);
});
app.listen(3000, function() {
	console.log('app is running at port 3000.');
});

中间件的匹配规则

  1. Express根据每个中间件的路径和请求方法进行匹配

  2. 当请求进来,会从第一个中间件开始进行匹配

  • 匹配成功则调用该中间件函数,执行里面的代码
    • 执行了next( ),那么会继续向下匹配中间件
    • 没有执行next( ),将结束匹配,即使下面有匹配的中间件函数,也不会调用
  • 不匹配,则向后依次对比匹配

中间件的分类

应用程序级别的中间件

匹配任何请求路径和请求方法

app.use(function(req,res,next){
    console.log('Time',Date.now());
    next();
});

匹配请求路径为/index或者/index开头的任何请求方法

app.use('/index',function(req,res,next){
    console.log('Time',Date.now());
    next();
});

路由级别的中间件

注:以下请求路径必须是/index或者/index/,/index/xxx是不能匹配到的

匹配请求路径为/index的get请求方法

app.get('/index',function(req,res){
	res.send('get');
});

匹配请求路径为/index的post请求方法

app.post('/index',function(req,res){
	res.send('post');
});

匹配请求路径为/index的put请求方法

app.put('/index',function(req,res){
	res.send('put');
});

匹配请求路径为/index的delete请求方法

app.delete('/index',function(req,res){
	res.send('delete');
});

错误处理中间件

在最后配置找不到页面的中间件,当上面都没有匹配,则会匹配该中间件

app.use(function(req,res){
    res.send('404 找不到页面');
});

在最后配置全局错误处理中间件,该中间件必须有四个参数,第一个参数err是之前在其他中间件调用 next()存入的,只有在之前调用过next()并且存入err参数,该中间件才会被匹配到

app.get('/index', function(req, res, next) {
	fs.readFile('./index', function(err, data) {
		if (err) {
        	// 当调用next()存入err参数后,会往下继续匹配,此时只会匹配到全局错误处理中间件
			next(err);
		}
        res.send(data)
	})
});
//全局错误处理中间件
app.use(function(err,req,res,next){
    res.status(500).json({
        err_code:500,
        message:err.message
    });
});

内置中间件

express.static(提供静态文件),配置后能够访问到./public中所有文件

// 当以/public/开头的请求,会去./public/目录中找对应资源
app.use('/public/',express.static(path.join(__dirname, './public'))); 

第三方中间件

参考文档:http://expressjs.com/en/resources/middleware.html

  • body-parser
  • compression
  • cookie-parser
  • mogran
  • response-time
  • server-static
  • session
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值