Reputation: 3343
I have router created with koa-router
:
auth.js
const KoaRouter = require('koa-router');
const { signIn, signUp } = require('../controllers/auth');
const authRouter = new KoaRouter();
authRouter.post('/signin', signIn).post('/signup', signUp);
module.exports = authRouter;
And I want to use it as middleware in my main app. In express, I can just write app.use(authRouter)
. But Koa said that the middleware should be a function. I find a solution for that and used koa-mount
package to solve that problem like this app.use(mount(authRouter))
. But now it gives this error:
if (!Array.isArray(middleware)) throw new TypeError('Middleware stack must be an array!') ^
TypeError: Middleware stack must be an array!
But when I log the authRouter
the stack property is array of routes:
Router {
opts: {},
methods:
[ 'HEAD', 'OPTIONS', 'GET', 'PUT', 'PATCH', 'POST', 'DELETE' ],
params: {},
stack:
[ Layer {
opts: [Object],
name: null,
methods: [Array],
paramNames: [],
stack: [Array],
path: '/signin',
regexp: /^\/signin[\/#\?]?$/i },
Layer {
opts: [Object],
name: null,
methods: [Array],
paramNames: [],
stack: [Array],
path: '/signup',
regexp: /^\/signup[\/#\?]?$/i } ] }
Here is the whole code:
const Koa = require('koa');
const KoaRouter = require('koa-router');
const mount = require('koa-mount');
const bodyParser = require('koa-bodyparser');
const config = require('./config');
const authRoutes = require('./routes/auth');
const app = new Koa();
const router = new KoaRouter();
console.log(authRoutes);
app.use(bodyParser());
app.use(router.routes()).use(router.allowedMethods());
app.use(mount(authRoutes));
app.listen(config.PORT || 3001);
Upvotes: 0
Views: 708
Reputation: 6969
I think you're just missing calling .routes()
on your authRoutes
object.
const Koa = require('koa');
const KoaRouter = require('koa-router');
const mount = require('koa-mount');
const bodyParser = require('koa-bodyparser');
const config = require('./config');
const authRoutes = require('./routes/auth');
const app = new Koa();
const router = new KoaRouter();
console.log(authRoutes);
app.use(bodyParser());
app.use(router.routes()).use(router.allowedMethods());
// add this line 👇🏼
app.use(authRoutes.routes()).use(authRoutes.allowedMethods());
app.listen(config.PORT || 3001);
Upvotes: 1