Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 我在jwt.sign()内赋值时遇到问题_Node.js_Jwt - Fatal编程技术网

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})
放在回调内部,而不是外部。这就是我所说的最后一步。