我编写了以下 Typescript 代码来检查 jsonwebtoken
的工作原理。
import * as 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);
它编译得很好,但是当我尝试运行它时,出现以下错误:
TypeError: jwt.decode is not a function
at Object.<anonymous> ([path]/src/testjwt2.js:30:21)
at Module._compile (node:internal/modules/cjs/loader:1205:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1259:10)
at Module.load (node:internal/modules/cjs/loader:1068:32)
at Module._load (node:internal/modules/cjs/loader:909:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:82:12)
at node:internal/main/run_main_module:23:47
Node.js v19.1.0
如果我用jwt.decode
函数注释掉该行,它就可以工作。我尝试在网上查找解决方案,很多解决方案涉及循环依赖、错误的函数名称等。代码很简单,我使用 VSCode 的代码完整功能来获取 decode
。所以,我对这里发生的事情感到困惑。
提前感谢您提供任何帮助/解决方案。
最佳答案
我在将项目转换为 ESM 时遇到相同的错误
你可以试试这个。
我使用调试器检查了 var
,发现导出缺失,但在嵌套的默认对象中。对我有用;)
jwt.default.decode(token, {complete: true });
关于 typescript 错误: jwt.解码不是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75622271/