Почему я не могу обслуживать статические файлы с маршрутизатора 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, чтобы продемонстрировать проблему: koa-router-static-issue


person ChaseMoskal    schedule 21.01.2019    source источник
comment
попробуйте добавить ./ -> router.use(serve(./dist/clientside))   -  person Vadim Hulevich    schedule 21.01.2019
comment
@VadimHulevich - к сожалению, я обнаружил, что добавление префикса ./ не влияет   -  person ChaseMoskal    schedule 21.01.2019
comment
Можете ли вы показать свою ошибку 404?   -  person Sparw    schedule 21.01.2019
comment
@Sparw — браузер отображает текст Not Found — также я создал этот git репозиторий как простая песочница для демонстрации проблемы   -  person ChaseMoskal    schedule 21.01.2019


Ответы (1)


По сути, это то, как мы настраиваем вещи в нашем приложении.

Он использует 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 ) ;
person Nicholas Carey    schedule 01.02.2019
comment
Николас, это нормально для статических путей, но преимущества маршрутизатора позволяют использовать динамические параметры маршрута. Например, рассмотрим мультитенантное приложение —/public/:tenant/:site/:slug* — так как статика монтируется в приложение, а не промежуточное ПО маршрутизатора, вы не можете использовать динамические пути. Мысли? - person Tremendus Apps; 10.06.2019