You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

express-unless在控制器函数使用时报错TypeError的解决方法

解决TypeError: globalController.authorizeToken.unless is not a function的问题

我来帮你搞定这个问题!这个错误的核心原因很明确:你还没把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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 03:52:55