express 中间件的简单应用与实现
看了慕课网双越老师的课之后结合自己的理解做了一些简单的总结,如有不恰当之处,欢迎指正。
提到 express
就不得不提到中间件,接下来就简单的介绍一下 expres
中间件的简单应用与部分常用函数的实现。
1. express 中间件的简单应用
在日常项目的开发中,登录验证是一个非常常见的场景,这个时候 express
中间件就可以派上用场了。接下来分别使用原生 node
和 express
中间件的方法实现简单的登录验证。
应用场景:在获取博客列表之前要进行登录验证,只有在登录状态下才可以获取博客列表。
原生 node.js
实现登录验证:
if(method === 'GET' && req.path === '/api/blog/list') {
// 若req.session.username有值说明已经登录
if (req.session.username){
// 登录状态下可以获取博客列表
获取博客列表
}
}
express
中间件实现登录验证:
function loginCheck(req, res, next) {
if (某个登录成功的条件) {
next(); // 登录成功执行next
} else {
res.json({
errno: -1,
msg: 'login fail'
})
}
}
// 若在登录状态下,loginCheck会执行next函数,从而执行第二个中间件,获取博客列表。
app.get('/api/blog/list', loginCheck, (req, res, next) => {
获得博客列表
})
虽然上面这个简单的例子中看上去似乎原生 node.js
要更简单一些,但是使用中间件的方式封装性更好,在一些比价复杂的项目中就能体现出优势了。
2. express 中 use, get, post, next, listen
等方法的实现
结合上面的流程图和最后给出的完整代码,简单说明一下实现的过程:
这里以 use
(在实现思路上和 get
, post
是一样的)为例说明:
-
获取路径和中间件
use
将用户调用时传入的参数传给register
函数,register
函数将获取到参数后分离出路径和中间两部分,路径存放在info.path
中,中间件存放在info.stack
中。然后register
函数将分离开的路径和中间件再返回给use
,use
拿到分离后的路径和中间件之后,会将其赋值给constructor
函数中this.routes.all
。
注意:register 在分离路径时需要注意的一点是对于没有路径只有中间件的参数会将其路径赋值为根路径
/
-
listen
方法的实现使用
express
时调用app.listen(3000)
实际上不只是监听3000
端口还创建了一个http
服务,参数是一个回调函数,代码如下:listen(...args) { const server = http.createServer(this