为了账号安全,请及时绑定邮箱和手机立即绑定

koa2中间件问题

koa2中间件问题

慕侠2389804 2019-01-31 22:19:43
const Koa = require('koa')const static = require('koa-static')const path = require('path')const app = new Koa()const test1 = async (ctx, next) => {  console.log('test1')  await next()}const test2 = (ctx, next) => {  console.log('test2')  next()}app.use(static(path.join(__dirname, 'dist')))app.use(test1)app.use(test2)app.listen(8999, () => {  console.log(8999)})进入localhost:8999后,test1,test2两个中间件没有被触发跟koa-static调换位置之后app.use(test1)app.use(test2)app.use(static(path.join(__dirname, 'dist')))test1,test2两个中间件触发了,但koa-static没被触发。难道koa-static没有next()么,并且为何调换位置后koa-static也触发不得
查看完整描述

1 回答

?
慕莱坞森

TA贡献1810条经验 获得超4个赞

把第二个中间件写成异步的就可以了


const test2 = async (ctx, next) => {

  console.log('test2')

  await next()

}

koa中间件执行后必须返回一个promise,如果非要用普通的函数写法,可以这样:


const test2 =  (ctx, next) => {

  return next().then(()=>{

    console.log('test2')

  })

}

如果你非要搞懂,可以看下这篇文章深入浅出koa2

再补充一下,不知道你看完这个能不能理解

const Koa = require('koa');

const static = require('koa-static')

const path = require('path')

const app = new Koa();


const test1 = async (ctx, next) => {

  console.log('test1')

  await next()

}


const test2 =  (ctx, next) => {

  console.log('test2')

  return next().then(()=>{

    console.log('test3')

  })

}


const test3 =  (ctx, next) => {

  console.log('test4')

  return next().then(()=>{

    console.log('test5')

  })

}


app.use(test1)

app.use(test2)

app.use(test3)

app.use(static(path.join(__dirname, 'static')))

app.listen(8080);


// 打印结果

test1

test2

test4

test5

test3


查看完整回答
反对 回复 2019-02-02
  • 1 回答
  • 0 关注
  • 691 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信