无法将jwt令牌添加到node.js响应

时间:2018-09-10 09:34:07

标签: javascript node.js jwt

我是javascript生态系统的新手,并希望添加jwt令牌以响应此注册路由器:

router.post('/register', (req, res)=> {

    User.findOne({email: req.body.email})
     .then(user => {
        if(user) {
            return res.status(400).json({error: 'Email already exists'});
        } else {                    
            const newUser = new User({
                username: req.body.username,
                email: req.body.email,
                password: req.body.password
            });

            bcrypt.genSalt(10, (err, salt)=> {
                bcrypt.hash(newUser.password, salt, (err, hash)=> {
                    if (err)  throw err;
                    newUser.password = hash;
                    newUser.save()                      
                      .then(user => res.status(200).json(user)) //<=Problem is here
                      .catch(err => console.log(err));
                } )
            })
        }
     })

});

jwt代码段(在longin路由器上可以正常工作)是这样的:

        const payload = {
            username: user.username
        }

        //sign token
        jwt.sign(
            payload, 
            keys.secretOrKey, 
            { expiresIn: 3600}, 
            (err, token)=> { 
                res.json({
                    success: true,
                    token: 'Bearer '+ token,
                    username: username
                });
            });

问题是我不知道如何将代码段添加到响应标头中。 在.then(user =>之后添加它时,出现SyntaxError: Unexpected token const错误。

我该怎么做?

1 个答案:

答案 0 :(得分:2)

听起来好像您没有将jwt片段包裹在花括号中。没有它们,出现问题的箭头功能仅采用一个表达式。将jwt代码段粘贴到以下代码段中。

bcrypt.genSalt(10, (err, salt)=> {
    bcrypt.hash(newUser.password, salt, (err, hash)=> {
    if (err)  throw err;
    newUser.password = hash;
    newUser.save()                      
        .then(user => {
          res.status(200).json(user);
          <JWT_Snippet_here>
        }
        .catch(err => console.log(err));
    })
})

Here,您将看到如何定义箭头功能的语法。以下引用显示了最重要的部分。

  

(param1,param2,…,paramN)=> {语句}

     

(param1,param2,…,paramN)=>表达式

需要大括号才能使用语句列表。您遇到的错误是因为您的JavaScript引擎需要一个表达式,而是找到了一个语句列表。