Express框架——中间件

在上一篇我们了解了Express框架中关于路由的内容,那么这一篇我们重点了解一下Express框架中的中间件,其实我们路由篇中也使用过中间件,那么在洗那么我们具体了解一下吧。

什么是中间件

中间件就是一堆方法,主要由中间件方法以及请求处理函数组成。可以接收客户端发来的请求、可以对请求做出响应,也可以将请求继续交给下一个中间件继续处理。

在这里插入图片描述

路由器级中间件

路由器级中间件我们在路由篇中了解过的,就是路由的使用过程,可以直接通过实例使用,也可以通过express.Router()使用。可以针对同一路由设置多个中间件,对同一个路由进行多次处理。默认情况下,请求从上到下依次匹配中间件。调用next方法将请求的控制权交给下一个中间件,直到遇到结束请求的中间件。

app.get('/request', (req, res, next) => {
    req.name = "张三";
    next();
});
app.get('/request', (req, res) => {
    res.send(req.name);
});

应用层中间件

应用层中间件是通过app.use方法将中间件绑定到实例上,应用层中间级可以匹配所有请求。应用层中间件有两种匹配方式:

  1. 万能匹配(不关心任何请求路径和请求方法)
	app.use(function(req, res, next) {
    console.log('Time', Date.now())
    next()
});
// 三个参数:req 请求对象
//			res 响应对象
//			next() 下一个被匹配的中间件
  1. 只要以 ‘/xxx/’ 开头的:
	app.use('/a', function(req, res, next) {
    console.log('Time', Date.now())
    next()
});
// 三个参数:req 请求对象
//			res 响应对象
//			next() 下一个被匹配的中间件

错误处理中间件

错误处理中间件始终带有四个参数,必须提供四个参数以将其标识为错误处理中间件函数。即使不需要使用该next对象,也必须指定它。

// 错误处理的中间件要写在最后面
// 在前面的中间件的 err 处理:next(err) 这样就会直接进入错误处理的中间件
// 配置错误处理中间件的好处是,不用每个中间件都去处理错误了,把错误处理放在一个中间件中
app.use(function(err, req, res, next) {
	console.log(err.stack)
	res.status(500).send('Something broke!')
})
// 参数: err 错误对象
//		 req 请求对象
//       res 响应对象
//		 next 下一个匹配的中间件

内置中间件

除了路由器级中间件等自定义中间件,Express 框架中还提供了三个内置的中间件分别是:

  1. express.static:提供静态资源,例如HTML文件,图像等
  2. express.json:使用JSON负载解析传入的请求。
  3. express.urlencoded:使用URL编码的有效内容解析传入的请求。

第三方中间件

第三方中间件是已经写好的自定义中间件,可以直接下载使用。在 Express 中,我们直接通过npm init指令将所需要的依赖全部下载完成,这些依赖中也包括这些第三方中间件。比较常见的第三方中间件有body-parser、compression,cookie-parser、morgan、response-time、serve-static、session等,在之后我们分别去了解一些第三方中间件的用法,这里只是进行概述。


模板引擎

一个模板引擎使能让我们使用静态模板文件。在运行时,模板引擎用实际值替换模板文件中的变量,并将模板转换为发送给客户端的HTML文件。这种方法使设计HTML页面更加容易。 与Express一起使用的一些流行模板引擎有Pug, Mustache和EJS等。

我们在通过 Express 生成器搭建项目框架时,在app.js 中有这样两行代码:

app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

这两行代码就是设置模板文件所在的目录和使用的模板引擎。

  1. views,即模板文件所在的目录。例如:app.set(‘views’, ‘./views’)。这默认为views应用程序根目录中的目录。
  2. view engine,要使用的模板引擎。例如,使用帕格模板引擎:app.set(‘view engine’, ‘pug’)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值