Express.js集成JWT鉴权报TypeError常量变量赋值错误求助
报错成因
TypeError: Assignment to constant variable 是JS语法层面的硬性错误,触发点完全来自你写的鉴权中间件代码:
- 你通过
const声明了token变量:const token = req.get('authorization'); - 后续逻辑中你尝试对这个
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
相关产品推荐
相关产品推荐

