Node.js 我在jwt.sign()内赋值时遇到问题
我试图用Node.js 我在jwt.sign()内赋值时遇到问题,node.js,jwt,Node.js,Jwt,我试图用jwt.sign()方法对有效负载进行签名。我选择了异步方式(您可以将回调函数作为参数传递),它如下所示: jwt.sign(有效负载,'secret',(错误,令牌)=>{ 如果(错误)抛出错误 console.log(token)//在此处成功记录令牌 }) 然后,我尝试在函数外部声明一个变量,并尝试将token的值分配给它,以便稍后可以使用它将其发送到客户端(将其存储在localstorage中) 这就是我接下来所做的: 让我们签名吧 jwt.sign(有效负载,'secret'
jwt.sign()
方法对有效负载进行签名。我选择了异步方式(您可以将回调函数作为参数传递),它如下所示:
jwt.sign(有效负载,'secret',(错误,令牌)=>{
如果(错误)抛出错误
console.log(token)//在此处成功记录令牌
})
然后,我尝试在函数外部声明一个变量,并尝试将token的值分配给它,以便稍后可以使用它将其发送到客户端(将其存储在localstorage中)
这就是我接下来所做的:
让我们签名吧
jwt.sign(有效负载,'secret',(错误,令牌)=>{
如果(错误)抛出错误
console.log(token)//在此处成功记录令牌
signedToken=令牌
console.log(signedToken)//signedToken日志成功
})
console.log(signedToken)//日志“未定义”
因此,该值在函数范围外显示为未定义。我不知道我是否缺少了一些基本的东西?console.log(signedToken)
在jwt.sign(async)完成之前被调用
你需要使用
let signedToken = jwt.sign(payLoad, 'secret')
console.log(signedToken)
如果您真的想用async/await以异步方式完成它,那么您需要用一个承诺来包装它
let signedToken = await new Promise((resolve, reject) => {
jwt.sign(payLoad, 'secret', (err, token) => {
if (err) reject(err)
//...do what u want with the token
resolve(token)
})
})
你需要用承诺来包装回拨。。。然后等待整个承诺…这是异步的全部要点,事件触发,但未完成,并继续运行其余代码。。然后,在代码的其余部分完成后,将执行回调…感谢您的响应!我应该做
async(err,token)=>{}
?不会做任何更改…您好,谢谢:)但是如果我想将回调传递到jwt.sign()
?添加了一个承诺解决方案,但这是额外的毫无意义的步骤。回调只有在jwt.sign将成为ur函数的最后一步时才有用。非常感谢!我还有一个问题,如果你愿意回答的话!为什么只有当它是my函数的最后一步时它才有用?从您的代码中,您会注意到console.log(signedToken)
没有从jwt.sign
的回调函数中获取值。如果你拿不到代币,我想你以后什么都做不了。因此,我们通常要做的是将res.json({token})
放在回调内部,而不是外部。这就是我所说的最后一步。