8

为什么在以下情况下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

4

2 回答 2

6

这基本上就是我们在应用程序中配置内容的方式。

它用于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 ) ;
于 2019-02-01T01:32:57.873 回答
0

另一种选择是以一种可以作为路由器后备的方式包装静态文件夹......

const router = Router();
router.get('/', (ctx) => { ctx.body = 'Hello World!' });
app.use(serve('/tmp'));
app.use(router.routes());

在该示例中,/将带您到 helloWorld,并回退到其中的任何文件/tmp/

来源:https ://github.com/ZijianHe/koa-router/issues/446

于 2021-12-17T18:26:21.033 回答