Почему промежуточное ПО "koa-static" продолжает возвращать 404?
Я пробую Коа с помощью коа-статики. Но он продолжает возвращаться 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 / 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.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 ответ
Ваша проблема в роутере, с которого вы возвращаетесь 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)
}
}