Почему я не могу обслуживать статические файлы с роутера Koa?
Почему в следующем случае koa-static
не работать с koa-router
?
const Koa = require("koa")
const serve = require("koa-static")
const Router = require("koa-router")
const app = new Koa()
const router = new Router()
// fails with 404... why?
router.use(serve("public"))
// // this, on the other hand, works
// app.use(serve("public"))
app.use(router.middleware())
app.listen(8080)
// browse to "http://localhost:8080/testfile.txt"
Я сделал репозиторий GitHub для демонстрации проблемы: https://github.com/chase-moskal/koa-router-static-issue
2 ответа
По сути, это то, как мы настроили вещи в нашем приложении.
Оно использует koa-mount
смонтировать статический файловый сервер по определенному корневому URL. Если ваши статические URL-адреса файлов перекрывают пространство имен ваших маршрутов, статические файлы побеждают.
const Koa = require('koa')
const Router = require('koa-router')
const serve = require('koa-static')
const mount = require('koa-mount')
const app = new Koa()
const router = new Router()
router.get('/public/foobar.txt', (ctx,next) => {
ctx.body = "Ta-Da!"
ctx.status = 200
return;
})
app.use( mount( '/public', serve('./public') ) ) ;
app.use( router.middleware())
app.listen( 8080 ) ;
Другой вариант - обернуть статическую папку таким образом, чтобы она могла служить запасным вариантом для маршрутизатора...
const router = Router();
router.get('/', (ctx) => { ctx.body = 'Hello World!' });
app.use(serve('/tmp'));
app.use(router.routes());
В этом примере собирается
/
перенесет вас в helloWorld и вернет к любым файлам в
/tmp/