The docs at https://github.com/koajs/static and my personal experience trying out koa-static lead me to believe that you can only serve files from the root URL of your app.
For example:
app.use(serve('./some/dir/'));
Given the above use of serve
, the URL to access a file ./some/dir/something.txt
would be localhost:3000/something.txt
. There doesn't seem to be a way to configure my app such that the same file (and all other files in the same dir) is served at localhost:3000/static/something.txt
instead.
I'm new to Node and to Koa, so I've just begun to dive into this and I'm probably missing something really obvious.
app.use(route.get('/static/*'), serve(__dirname + '/some/dir'));
But upon requesting /static/something.txt
I was met with the following:
TypeError: Cannot read property 'apply' of undefined
at Object.<anonymous> (/Users/me/example/src/node_modules/koa-route/index.js:34:18)
at GeneratorFunctionPrototype.next (native)
at onFulfilled (/Users/me/example/src/node_modules/koa/node_modules/co/index.js:64:19)
at /Users/me/example/src/node_modules/koa/node_modules/co/index.js:53:5
at Object.co (/Users/me/example/src/node_modules/koa/node_modules/co/index.js:49:10)
at Object.toPromise (/Users/me/example/src/node_modules/koa/node_modules/co/index.js:117:63)
at next (/Users/me/example/src/node_modules/koa/node_modules/co/index.js:98:29)
at onFulfilled (/Users/me/example/src/node_modules/koa/node_modules/co/index.js:68:7)
at /Users/me/example/src/node_modules/koa/node_modules/co/index.js:53:5
at Object.co (/Users/me/example/src/node_modules/koa/node_modules/co/index.js:49:10)
To serve files just pass the koa-static middleware to the koa's middleware stack with app. use() .
use("/", express. static(__dirname + '/index. html'));
Koa. js is a minimal and flexible Node. js web application framework that provides a robust set of features for web and mobile applications. It is an open source framework developed and maintained by the creators of Express. js, the most popular node web framework.
To relocate middleware to another part of your app url-wise, you can use koa-mount
.
'use strict';
const koa = require('koa');
const mount = require('koa-mount');
const app = koa();
app.use(function* () { this.body = 'Hello, world'; });
app.use(mount('/foo', function*() { this.body = 'Hello, foo'; }));
app.listen(3000);
curl localhost:3000
> 'Hello, world'
curl localhost:3000/foo
> 'Hello, foo'
koa-router
itself does not support regex paths or parameter matching.
Sure you can. And as the accepted answer says, the trick is using koa-mount along with koa-static. Though I don't understand why he doesn't provide an example with actual static files. This works for me (in Koa2):
.use(serve('public'))
.use(mount('/static', serve('static')))
Both folders (public and static) are in my project's root. But the first one is served when the user access to /
, whereas the second one is served when they go to /static
.
That's all.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With