You need to enable JavaScript to run this app. Express.js集成JWT鉴权报TypeError常量变量赋值错误求助
优惠活动
大模型
产品
解决方案
定价
更多

Express.js集成JWT鉴权报TypeError常量变量赋值错误求助

报错成因

TypeError: Assignment to constant variable 是JS语法层面的硬性错误,触发点完全来自你写的鉴权中间件代码:

  1. 你通过const声明了token变量:const token = req.get('authorization');
  2. 后续逻辑中你尝试对这个const声明的变量重新赋值:token=token.slice(7);

按照JS语法规则,const声明的块级常量仅支持在声明时完成初始化,初始化后不允许对该变量标识符重新绑定值,执行重赋值操作就会直接抛出该错误。

问题对应的代码位置:

checkToken :(req,res,next)=>{
    // const 声明常量token
    const token = req.get('authorization');
    if(token){
        console.log(token);
        // 对const声明的token重新赋值,直接触发报错
        token=token.slice(7);
        verify(token,process.env.TOKEN_KEY,(err,decoded)=>{
            // ...
        })
    }
    // ...
}
修复方案

两种修复方式均可解决问题,按需选择即可:

  • 方案1:将变量声明的const替换为let,适配后续需要修改变量值的逻辑
    调整后的代码:
    // 用let声明块级变量,允许后续重新赋值
    let token = req.get('authorization');
    if(token){
        token = token.slice(7);
        // 原有verify校验逻辑保持不变
    }
    
  • 方案2:不改动原常量的绑定,单独声明新变量存储处理后的有效token,符合常量不修改的编码规范
    调整后的代码:
    const token = req.get('authorization');
    if(token){
        // 单独声明新变量存储截取后的纯token,不修改原const声明的变量
        const pureToken = token.slice(7);
        // 将处理后的pureToken传入verify方法完成校验
        verify(pureToken, process.env.TOKEN_KEY, (err, decoded)=>{
            // 原有校验逻辑保持不变
        })
    }
    

额外提醒:你现有代码里两处响应返回的messgae存在拼写错误,正确拼写为message,修复常量报错后可同步修正该问题,避免前端读取提示信息时出现字段不匹配的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.11 05:45:03