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

时间:2018-05-27 08:57:37

标签: javascript node.js koa koa2 koa-router

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

要重现

  

Windows 10 x64,Node 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

代码

的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.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

我不是英语发言者,请原谅一些语法错误。

先谢谢!

1 个答案:

答案 0 :(得分: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)
  }
}