koajs / compose

Middleware composition utility

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

when i use koa-compose with koa-router, koa-router does not work.

snowdream opened this issue · comments

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;

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

Try

app.use(index.routes())
app.use(index.allowedMethods())
app.use(users.routes())
app.use(users.allowedMethods())

@fl0w it does not work.

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)

Why does...

app.use(compose([
  router.routes(),
  router.allowedMethods()
]))

...not work?