【问题标题】:Koa - TypeError: Middleware stack must be an arrayKoa - TypeError:中间件堆栈必须是一个数组
【发布时间】:2020-10-29 18:06:27
【问题描述】:

我用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;

我想在我的主应用程序中使用它作为中间件。在快递中,我可以写app.use(authRouter)。但是 Koa 说中间件应该是一个函数。我找到了一个解决方案,并使用koa-mount 包来解决这个问题,比如app.use(mount(authRouter))。但现在它给出了这个错误:

if (!Array.isArray(middleware)) throw new TypeError('Middleware stack 必须是一个数组!') ^

TypeError: Middleware stack must be an array!

但是当我记录 authRouter 时,堆栈属性是路由数组:

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 } ] }

这是完整的代码:

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);

【问题讨论】:

    标签: javascript node.js middleware koa


    【解决方案1】:

    我认为您只是缺少在您的 authRoutes 对象上调用 .routes()

    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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-25
      • 2018-08-11
      • 2021-10-12
      • 1970-01-01
      • 2021-05-02
      • 1970-01-01
      • 1970-01-01
      • 2017-07-30
      相关资源
      最近更新 更多