使用jsonwebtoken报错TypeError: jwt.decode is not a function求助
解决方案:
jwt.decode is not a function 错误处理 问题根源
你遇到的问题是因为jsonwebtoken v9.x版本的导出结构发生了变更,从传统CommonJS导出转为兼容ES模块的导出方式。VSCode的自动补全基于类型定义文件,仍沿用旧的结构提示方法,但运行时实际导出的模块对象中,decode不再直接挂载在jwt对象上。
具体解决方法
方法1:改用默认导入
修改TypeScript的导入语句为默认导入,直接获取完整的jwt工具对象:
import jwt from "jsonwebtoken"; import * as fs from "fs"; const privateKey = fs.readFileSync("key.pem"); const token = jwt.sign({ foo: "bar" }, privateKey, { algorithm: "RS256" }); const decoded = jwt.decode(token, { complete: true }); const verified = jwt.verify(token, privateKey);
方法2:单独解构导入decode函数
如果需要保留命名空间导入,可以单独解构出decode方法:
import * as jwt from "jsonwebtoken"; import { decode } from "jsonwebtoken"; import * as fs from "fs"; const privateKey = fs.readFileSync("key.pem"); const token = jwt.sign({ foo: "bar" }, privateKey, { algorithm: "RS256" }); const decoded = decode(token, { complete: true }); const verified = jwt.verify(token, privateKey);
方法3:降级到v8.x版本
如果你不想修改代码,可以将jsonwebtoken降级到没有导出变更的v8.x版本:
npm install jsonwebtoken@8.5.1 # 或使用yarn yarn add jsonwebtoken@8.5.1
内容的提问来源于stack exchange,提问作者arcane_vander
相关产品推荐
相关产品推荐

