javascript - Koa - TypeError:中间件堆栈必须是一个数组
问题描述
我创建了路由器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 must be an array!') ^
TypeError:中间件堆栈必须是数组!
但是当我记录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);
解决方案
我认为你只是错过了调用.routes()
你的authRoutes
对象。
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);
推荐阅读
- c# - LINQ 不会使用 EF Core 对组产生 COUNT() 查询
- angular - 什么是 RxJS 中的订阅以及 Observables 如何与它们交互?
- android - 到 Python 服务器的 Android 套接字连接
- oracle - insert all and inner join in oracle
- sbt - 如何在 sbt 1.0.x 中发布自定义工件
- wpf - MaterialDesignInXAML 文本框字体颜色为白色(背景颜色)
- java - 扫描仪“没有下一行”-错误
- ios - Alamofire 中的 TimeoutInterval
- r - 特定条件下 R 中的求和积
- javascript - 如何使用表格中的选定数据打开 Angular 模态窗口