我还无法找到我收到该错误的正当理由。我正在尝试自己构建博客功能,以便使用中间件功能检查用户是否已通过身份验证,从而在平均应用中创建,评论,喜欢帖子。在所有活动中,它都可以正常工作,但具有类似功能!当我在中间件功能中通过控制台登录令牌时,令牌通常会显示在屏幕上,但类似路线无法识别它。这是我的代码:
router.post('/:id/like', checkToken, (req, res)=>{
console.log(req.token);// undefined
jwt.verify(req.token, 'natsu1piece', (err, auth)=>{
if(err){
console.log(err);
res.json({err:err});
}else {
User.findOne({_id:auth.id}, (err, user)=>{
if(err){
res.json({err:err})
}
Post.findById(req.params.id, (err, post)=>{
if(err){
res.json({err:err})
}
if(post._id===user._id){
res.json({err:'you cannot like your own post'})
}
const like ={
likerId: user._id,
likerName: user.username
}
post.likes.push(like);
post.save(err=>{
if(err){
res.json({err})
}
res.json({message: 'you liked that post'})
})
})
})}
})
})
这是checkAuth中间件:
// check authentication middleware
function checkToken(req, res, next){
const tokenBearer= req.headers.authorization;
if(typeof tokenBearer !== 'undefined'){
const bearer = tokenBearer.split(' ');
const token = bearer[1];
req.token = token;
console.log(req.token) // prints the sent token successfully
}
next();
}
我具有以下用于添加评论的功能,并且在相同的中间件上也可以很好地工作:
router.post('/:id/delete-comment', checkToken, (req, res)=>{
jwt.verify(req.token, 'natsu1piece', (err, auth)=>{
if(err){
console.log(err);
res.json({err:err});
return;
}
Post.findOneAndUpdate( {_id: req.params.id},
{
$pull:{
comments:{_id: req.body.id}
}},
err=>{
if(err){
console.log(err);
res.json({err:err});
}
}
)
})
})
很抱歉,很长的帖子:)