when i use koa-compose with koa-router, koa-router does not work.
snowdream opened this issue · comments
snowdream commented
app.js
const Koa = require('koa');
const app = new Koa();
const views = require('koa-views')(__dirname + '/views', {
extension: 'pug'
});
const json = require('koa-json');
const onerror = require('koa-onerror');
const bodyparser = require('koa-bodyparser')({
enableTypes:['json', 'form', 'text']
});
const logger = require('koa-logger');
const koa_static = require('koa-static')(__dirname + '/public')
const compose = require('koa-compose');
const index = require('./routes/index');
const users = require('./routes/users');
// error handler
onerror(app);
// composed middleware
const all = compose([
bodyparser,
json,
logger,
koa_static,
views
]);
// routes
app.use(all);
// routes
app.use(index.routes(), index.allowedMethods());
app.use(users.routes(), users.allowedMethods());
module.exports = app;
snowdream commented
HuideMacBook-Pro:kvmt snowdream$ DEBUG=* npm start
> kvmt@0.1.0 start /Users/snowdream/workspace/snowdream/git/kvmt
> node bin/www
koa-static static "/Users/snowdream/workspace/snowdream/git/kvmt/public" {} +0ms
koa-router defined route HEAD,GET / +10ms
koa-router defined route HEAD,GET /string +1ms
koa-router defined route HEAD,GET /json +0ms
koa-router defined route HEAD,GET /users/ +0ms
koa-router defined route HEAD,GET /users/bar +0ms
koa:application use - +7ms
koa:application use dispatch +0ms
koa:application use dispatch +0ms
demo:server Listening on port 3000 +8ms
snowdream commented
Not Found
Martin Iwanowski commented
Try
app.use(index.routes())
app.use(index.allowedMethods())
app.use(users.routes())
app.use(users.allowedMethods())
Martin Iwanowski commented
Well, looking at this more, you need to instantiate koa-json
e.g.
const json = require('koa-json')()
You're passing in constructors which are not middleware that Koa understands.
The following minimal works as expected,
'use strict'
const Koa = require('koa')
const Router = require('koa-router')
const compose = require('koa-compose')
const json = require('koa-json')
const logger = require('koa-logger')
const app = new Koa()
const router = new Router()
// Correctly return a Koa middleware for all mw
const middleware = compose([json(), logger()])
router.get('/', async ctx => {
ctx.body = 'It should work'
})
app.use(middleware)
app.use(router.routes())
app.use(router.allowedMethods())
app.listen(1337)
Trevor commented
Why does...
app.use(compose([
router.routes(),
router.allowedMethods()
]))
...not work?