我是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
错误。
我该怎么做?
答案 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引擎需要一个表达式,而是找到了一个语句列表。