【发布时间】:2020-06-15 02:40:01
【问题描述】:
我有以下问题:
在我的控制器createPost 中,我需要使用库 JWT,但它似乎未定义,我不知道为什么
const jwt = require("jsonwebtoken");
const atob = require("atob");
import Post from "../models/post";
export default async function(req, res) {
const token = req.body.token;
if (!token) {
return res.status(403).send({
message: "Token ungültig, bitte melde dich ab und wieder an."
});
}
jwt.verify(req.body.token, "key", function(err) {
if (err) {
res.status(403).send(false);
return null;
}
});
如您所见,我已在此处使用 const jwt = require("jsonwebtoken"); 将其导入,但在第 11 行仍未定义。
jwt.verify(req.body.token, "myKey", function(err) {
我在这里做错了什么?
这也是我的错误信息:
错误 jwt 未定义
19:50:35默认情况下 (api\controllers\createPost.js:11:3) 在 Layer.handle [as handle_request] (node_modules\express\lib\router\layer.js:95:5)
在下一个 (node_modules\express\lib\router\route.js:137:13) 在 Route.dispatch (node_modules\express\lib\router\route.js:112:3) 在 Layer.handle [as handle_request] (node_modules\express\lib\router\layer.js:95:5) 在 node_modules\express\lib\router\index.js:281:22 at Function.process_params (node_modules\express\lib\router\index.js:335:12) 在下一个 (node_modules\express\lib\router\index.js:275:10) 在 Function.handle (node_modules\express\lib\router\index.js:174:3) 在路由器 (node_modules\express\lib\router\index.js:47:12) 在 Layer.handle [as 处理请求] (node_modules\express\lib\router\layer.js:95:5) 在 trim_prefix (node_modules\express\lib\router\index.js:317:13) 在 node_modules\express\lib\router\index.js:284:7 at Function.process_params (node_modules\express\lib\router\index.js:335:12) 在下一个 (node_modules\express\lib\router\index.js:275:10) 在 node_modules\body-parser\lib\read.js:130:5 at invokeCallback (node_modules\raw-body\index.js:224:16) 完成 (node_modules\raw-body\index.js:213:7) 在 IncomingMessage.onEnd (node_modules\raw-body\index.js:273:7) 在 IncomingMessage.emit (events.js:203:15) 在 IncomingMessage.EventEmitter.emit (domain.js:448:20) 在 endReadableNT (_stream_readable.js:1145:12)
【问题讨论】:
-
我看到这种情况发生的唯一方法是两种可能性都不太可能。 1. 如果
jsonwebtoken导出值undefined,而npm上的值没有。 2. 如果您在jsonwebtoken和您尝试使用它的模块之间有一个cyclic relationship(这似乎不太可能)。或者,如果您使用它的模块和使用该模块的模块之间存在循环? -
如果它是#2,您可以使用 ESM 模块加载器而不是默认的 CJS 加载器来解决它。使用 ESM,而不是
jwt在您的模块中是一个常量,它将是一个实时绑定,这意味着即使在一个循环中,只要您在所有模块都完成之前不要尝试使用它加载(我猜你没有,因为你在导出的async函数中有它),一切都很好。 -
我从
npm i jsonwebtoken得到了jwt -
我想通了。 :-) .
-
您向我们展示的文件中是否存在此错误?也许你有另一个文件正在使用
jwt.something但 jwt 没有在那里导入。您可能已将此代码复制/粘贴到另一个文件中而忘记导入 jwt,或者您忘记此代码引用了 jwt
标签: javascript node.js vue.js nuxt.js