express-unless在控制器函数使用时报错TypeError的解决方法
我来帮你搞定这个问题!这个错误的核心原因很明确:你还没把express-unless的方法绑定到你的authorizeToken中间件上,导致调用.unless()时找不到这个函数。
下面是具体的解决步骤:
方法一:在控制器中绑定unless方法
首先打开你的../controllers/global.js文件,在定义完authorizeToken中间件后,把unless挂载到它上面:
const unless = require('express-unless'); // 你的鉴权中间件 function authorizeToken(req, res, next) { // 这里写你的Token验证逻辑,比如检查req.headers里的token // 示例逻辑: const token = req.headers.authorization?.split(' ')[1]; if (!token) { return res.status(401).send('Unauthorized'); } // 验证token的逻辑... next(); } // 把unless方法绑定到authorizeToken上 authorizeToken.unless = unless(); module.exports = { authorizeToken };
这样回到你的路由文件,原来的代码就能正常运行了:
var express = require('express'); var router = express.Router(); // Controllers var globalController = require('../controllers/global'); router.use(globalController.authorizeToken.unless({ path: ['/users', '/pages'], method: 'GET' }));
方法二:直接用unless包装中间件(无需修改控制器)
如果你不想改动控制器代码,也可以在路由文件里直接用unless函数包裹你的中间件:
var express = require('express'); var unless = require('express-unless'); var router = express.Router(); // Controllers var globalController = require('../controllers/global'); router.use(unless(globalController.authorizeToken, { path: ['/users', '/pages'], method: 'GET' }));
这种方式更直接,不需要在控制器里做额外绑定。
为什么会出现这个错误?
express-unless并不是自动给所有中间件添加unless方法的,它需要你主动把这个方法挂载到目标中间件上,或者用它来包裹中间件。如果没做这一步,authorizeToken就没有unless这个属性,Node.js自然会抛出“不是函数”的类型错误。
内容的提问来源于stack exchange,提问作者user3428220
相关产品推荐
相关产品推荐

