例えば/static/hoge.png
みたいになURLで配信したい場合に、
.
├── app.coffee
└── static
└── hoge.png
という構成を取ろうとして
app.coffee
Router = require 'koa-router'
serve = require 'koa-static'
api = new Router
api.get '/static/*', serve './static'
とすると、一見うまく動きそうですが、実際/static/hoge.png
のリクエストを送っても404
になってしまいます。実は、このコードだと
.
├── app.coffee
└── static
└── static
└── hoge.png
このようにファイルを配置しないと適切にファイルを公開できないのです。要はkoa-static
は単純に指定したディレクトリにHTTPのパスをくっつけることしかしないってことです。
対処法
koa-static
はそのパスをthis.path
から読み取るので、serve
の前にthis.path
を書き換えてやるだけです。
app.coffee
api.get '/static/*', (next)->
parts = @path.split '/'
parts.splice 1, 1
@path = parts.join '/'
yield next
, serve './static'
非常に限局的な話ですが、同じような問題で困った方が居たら参考にしてください。