为什么 'koa-static' 中间件一直返回 404?

Why does 'koa-static' middleware keeps returning 404?

我正在使用 koa-static 尝试 Koa。但是在使用多级包含关系时,它一直返回404 (Body: Not Found)。不知道是什么原因。

转载,

目录:

index.html index.js sites/sites.js sites/onesite/index.js

index.html

Hello, koa

index.js

const Koa = require('koa')
const router = require('./sites/sites.js')
const app = new Koa()
app.use(router())
app.listen(80)

sites/sites.js

const compose = require('koa-compose')

module.exports = ()=>{
    return (ctx, next)=>{
        compose(require('./onesite').middleware)(ctx, next)
    }
}

sites/onesite/index.js

const Koa = require('koa')
const serve = require('koa-static')

const app = new Koa()
app.use(serve('.'))
module.exports = app

您的问题出在您 return 来自 sites.js 的路由器上:

module.exports = ()=>{
  return (ctx, next)=>{
    compose(require('./onesite').middleware)(ctx, next)
  }
}

compose 是一个异步函数,但您不需要等待它的承诺完成。解决这个问题的一种方法是 return return 由 compose 编辑的承诺,以便 koa 知道 它必须等待该承诺得到解决:

module.exports = ()=>{
  return (ctx, next)=>{
    return compose(require('./onesite').middleware)(ctx, next)
  }
}

另一种方法是使用 await:

module.exports = ()=>{
  return async (ctx, next)=>{
    await compose(require('./onesite').middleware)(ctx, next)
  }
}