首页 文章

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

提问于
浏览
0

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

To reproduce

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

Directory:

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

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

提前致谢!

1 回答

  • 0

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

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

    compose 是异步函数,但您不等待其承诺完成 . 解决此问题的一种方法是返回 compose 返回的promise,以便 koa 知道它必须等待解析该promise:

    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)
      }
    }
    

相关问题