0

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

要重现

  • Windows 10 x64,节点 v9.11.1
  • koa v2.5.1、koa-compose v4.1.0、koa-static v4.0.3、koa-send v4.1.3

目录:

index.html index.js 站点/sites.js 站点/onesite/index.js

索引.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.js

const compose = require('koa-compose')

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

站点/onesite/index.js

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

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

1 回答 1

0

您的问题出在您返回的路由器中sites.js

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

compose 是一个异步函数,但您不必等待它的承诺完成。解决这个问题的一种方法是返回由返回的承诺,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)
  }
}
于 2018-05-27T09:12:28.917 回答