介绍最经常使用的模式, 放心食用!bash
Connect和Express有什么关系呢?闭包
简言之,Express是在Connect的基础上,经过添加了一些高层语法糖扩展搭建出来的。app
Connect是Express的基础,实际上用Connect就能作出完整的Web程序。koa
先来安装connect函数
yarn add connect@3.4.0
写一个hello,worldui
const app = require('connect')() app.use((req, res, next) => { res.end('hello, world') }) app.listen(3000)
Connect
中间件就是一个js函数, 带有三个参数req, res, next
重点说一下next,next是一个回调函数,当一个中间件完成本身的工做,要执行后续中间件的时候,能够调用这个回调函数url
一图胜千言。spa
值的注意的是,connect中间件是串行执行的,在koa中则是洋葱模型code
const app = require('connect')() const logger = (req, res, next) => { console.log('%s %s', req.method, req.url) next() } app.use(logger) app.use((req, res, next) => { res.end('hello, world') }) app.listen(3000)
写中间件的时候必须调用next(),控制权才会交回给分派器,才能调用下一个中间件regexp
以前写的logger函数,输出信息是写死在中间件里的,所以不足够好,此次建立一个更通用的中间件模式
为了作到可配置, 这种模式通常都遵循一个原则。用一个函数返回另外一个函数(闭包)
const setup(options) { // 设置逻辑 return function(req, res, next) { // 中间件逻辑 } }
下面重写咱们的logger
const logger = (format) => { const regexp = /:(\w+)/g return (req, res, next) => { const str = format.replace(regexp, (match, property) => { return req[property] }) console.log(str) next() } } app.use(logger(":method :url"))
注意到使用了正则,和replace方法
当你使用错误中间件的时候,Connect遇到错误时,会跳过其余的中间件,直接跳到错误中间件