Почему промежуточное ПО «koa-static» продолжает возвращать 404? - PullRequest
0 голосов
/ 27 мая 2018

Я пробую Коа, используя koa-static.Но он продолжает возвращать 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.htmlindex.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 голосов
/ 27 мая 2018

Ваша проблема в маршрутизаторе, который вы возвращаете с 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)
  }
}
...