Express 中间件的工作原理
Express 中间件的工作原理
Express 的核心其实只有一个:中间件栈。一个请求进来,按注册顺序依次流过各中间件。
中间件长什么样
app.use((req, res, next) => {
console.log('请求时间:', Date.now())
next() // 交给下一个中间件
})
中间件就是 (req, res, next) => {} 函数,能拿到请求和响应,调用 next() 放行。
一条请求的旅行
app.use(logger) // 1. 日志
app.use(express.json()) // 2. 解析 body,挂到 req.body
app.use('/api/posts', postsRouter) // 3. 匹配前缀进路由
app.use(errorHandler) // 4. 错误处理(四个参数 (err, req, res, next))
关键点:
- 不调 next 也不响应,请求会一直挂起直到超时
next(err)会跳过所有普通中间件,直达错误处理中间件- 路由也是中间件:
app.get('/x', handler)本质是"匹配路径和方法才放行"
手写一个极简版
function createApp() {
const stack = []
const app = (req, res) => {
let i = 0
const next = (err) => {
if (i >= stack.length) return
const fn = stack[i++]
if (err && fn.length === 4) return fn(err, req, res, next)
if (!err && fn.length !== 4) return fn(req, res, next)
next(err) // 类型不对,往下传递
}
next()
}
app.use = (fn) => stack.push(fn)
return app
}
核心就是一个数组 + 递归调用的 next。Koa 后来在此基础上搞出了"洋葱模型"(async 函数从外到内再从内到外),原理是相通的。
看到这里了?如果这篇文章帮到过你
请我喝瓶可乐就好 🥤

评论0 条
还没有评论,来抢沙发~