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

Node.js应用中间件next()使用及Bearer令牌验证报错排查

问题分析与解决方案

错误原因

报错Error: Route.post() requires a callback function but got a [object Undefined]的核心原因是路由中引入的verifyToken中间件为undefined:

  • middlewares/verifyTokens.js中通过module.exports = verifyToken默认导出函数
  • 但routes/index.js中错误使用对象解构导入:const { verifyToken } = require('../middlewares/verifyTokens')

默认导出的内容无法通过解构获取,导致verifyToken变量为undefined,Express路由注册时触发该错误。

修正步骤

1. 修正路由的中间件导入方式

修改routes/index.js,移除解构语法,直接导入默认导出的函数:

const { Router} =  require('express')
const userController = require('../controllers/index')
// 去掉解构,直接导入默认函数
const verifyToken = require('../middlewares/verifyTokens')
const router = Router()

router.post('/login', userController.login)
router.post('/profile',verifyToken ,userController.profile)

module.exports = router

2. 完善verifyToken中间件(补充签名验证逻辑)

当前中间件仅提取了token,未验证其合法性(签名、有效期等),补充验证逻辑:

const { verify } = require('jsonwebtoken')
const secret = process.env.SECRET;

function verifyToken(req, resp, next) {
    const bearerHeader = req.headers['authorization'];
    if (typeof bearerHeader !== 'undefined') {
        const bearer = bearerHeader.split(" ");
        const token = bearer[1];
        try {
            // 验证token签名与有效性
            const decoded = verify(token, secret);
            // 将解码后的用户信息挂载到req,供后续控制器使用
            req.user = decoded;
            next();
        } catch (err) {
            resp.status(401).send({
                result: 'Token无效或已过期'
            })
        }
    } else {
        resp.status(401).send({
            result: '缺少Token'
        })
    }
}

module.exports = verifyToken

3. 修复控制器的变量声明问题

controllers/index.js中payload未声明,添加const避免全局变量污染:

const login = async (req, res) => {
  // 添加const声明
  const payload = {
    "email": "abc@gmail.com",
    "password": "user123"
  }
  // 其余代码不变
}

测试验证

  1. 重启服务后,调用/abc/login获取有效token
  2. 调用/abc/profile时,在请求头添加Authorization: Bearer <你的token>,即可正常访问;若token无效/缺失,会返回对应错误提示。

内容的提问来源于stack exchange,提问作者Ateeq

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 11:40:22