I\'m new to koa.js library and I need some help. I\'m trying to make simple REST application using koa.
I have a static html and javascript files I want to serve on route
From @Nurpax in the comments:
app.use(async function (ctx, next) {
return send(ctx, '/index.html', { root: paths.client()
})
.then(() => next()) })
The key thing was to specify {root:<some path>}
. I think the problem in my case was that for security reasons, send doesn't allow relative paths or paths outside of the project tree. Specifying the root param and then giving a filename relative to that seemed to fix the problem. I guess I expected koa-send to log an error/warning on the node output about this.
It was a little hard for me to follow what you were doing in your example code... Here is a simple example that does everything your wanting:
'use strict';
let koa = require('koa'),
send = require('koa-send'),
router = require('koa-router')(),
serve = require('koa-static');
let app = koa();
// serve files in public folder (css, js etc)
app.use(serve(__dirname + '/public'));
// rest endpoints
router.get('/api/whatever', function *(){
this.body = 'hi from get';
});
router.post('/api/whatever', function *(){
this.body = 'hi from post'
});
app.use(router.routes());
// this last middleware catches any request that isn't handled by
// koa-static or koa-router, ie your index.html in your example
app.use(function* index() {
yield send(this, __dirname + '/index.html');
});
app.listen(4000);
const root = require('path').join(__dirname, 'client', 'build');
app.use(serve(root));
app.use(async ctx => {
await send(ctx, `/index.html`, {
root
});
});