← 返回文章列表
Node.js·2149 次阅读

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 条

还没有评论,来抢沙发~

发表评论

评论需审核后显示

© 2026 许冬博客 · 专注 JS 技术分享

·RSS 订阅·Powered by Nuxt 4