账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    express 和 koa 的中间件执行机制
    23
    0
    const Koa = require('koa')
    const route = require('koa-route')
    const app = new Koa()
    
    app.use(async function middleware1(ctx, next) {
      console.log('middleware1 开始')
      await next()
      console.log('middleware1 结束')
    })
    
    app.use(async function middleware2(ctx, next) {
      console.log('middleware2 开始')
      await next()
      console.log('middleware2 结束')
    })
    
    app.use(async function middleware3(ctx, next) {
      console.log('middleware3 开始')
      await next()
      console.log('middleware3 结束')
    })
    
    app.use(route.get('/', (ctx, next) => {
      ctx.body = 'hello koa'
    }))
    
    app.listen(3001, function () {
      console.log('server is listening on port 3001')
    })
    
    middleware1 开始
    middleware2 开始
    middleware3 开始
    middleware3 结束
    middleware2 结束
    middleware1 结束

    这段代码使用 Koa,按照 Koa 的“洋葱圈”中间件模型,中间件里的代码会像“回形针”一样执行,执行结果如上。

    const express = require('express')
    const app = express()
    
    app.use(function middleware1(req, res, next) {
      console.log('middleware1 开始')
      next()
      console.log('middleware1 结束')
    })
    
    app.use(function middleware2(req, res, next) {
      console.log('middleware2 开始')
      next()
      console.log('middleware2 结束')
    })
    
    app.use(function middleware3(req, res, next) {
      console.log('middleware3 开始')
      next()
      console.log('middleware3 结束')
    })
    
    app.get('/', function (req, res, next) {
      res.end('hello express')
    })
    
    app.listen(3000, function () {
      console.log('server listening on port 3000!')
    })
    
    middleware1 开始
    middleware2 开始
    middleware3 开始
    middleware3 结束
    middleware2 结束
    middleware1 结束

    Express 的中间件模型是线性的,next() 之后的代码应该不会执行,但是上面代码的执行结果却和使用 Koa 一样。
    想请教大佬们解释一下执行结果为什么是这样的。

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 城市野鹿 普通会员 1楼
      502 Bad Gateway

      502 Bad Gateway


      nginx
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部