这部分没有什么了解,我也是刚学,引用nswbmw 所著内容,权当一个Mark。
1. 概念
express 中的中间件(middleware)就是用来处理请求的,当一个中间件处理完,可以通过调用 next() 传递给下一个中间件,如果没有调用 next(),则请求不会往下传递,如内置的 res.render 其实就是渲染完 html 直接返回给客户端,没有调用 next(),从而没有传递给下一个中间件。看个小例子,修改 index.js 如下:
index.js内容此时浏览器访问localhost:3000时,终端会输出:
zhangyanming01
zhangyanming02
通过 app.use 加载中间件,在中间件中通过 next 将请求传递到下一个中间件,next 可接受一个参数接收错误信息,如果使用了 next(error),则会返回错误而不会传递到下一个中间件,修改 index.js 如下:
index.js内容此时浏览器访问localhost:3000时,终端和浏览器控制台都会有错误输出
2. 其他相关介绍
(1)app.use 有非常灵活的使用方式,详情见 官方文档
express 有成百上千的第三方中间件,在开发过程中我们首先应该去 npm 上寻找是否有类似实现的中间件,尽量避免造轮子,节省开发时间。下面给出几个常用的搜索 npm 模块的网站:
* http://npmjs.com(npm 官网)
* http://node-modules.com
* https://npms.io
* https://nodejsmodules.org
express@4 之前的版本基于 connect 这个模块实现的中间件的架构,express@4 及以上的版本则移除了对 connect 的依赖自己实现了,理论上基于 connect 的中间件(通常以 connect- 开头,如 connect-mongo)仍可结合 express 使用。
中间件的加载顺序很重要!比如:通常把日志中间件放到比较靠前的位置,后面将会介绍的 connect-flash 中间件是基于 session 的,所以需要在 express-session 后加载。
(2)关于 express 的错误处理,详情见 官方文档
网友评论