【发布时间】:2021-03-11 11:55:12
【问题描述】:
我得到了
“未捕获(承诺中)错误:请求失败,状态码为 401”
而我的其他 API(如 GET、PUT 和 POST 和 JWT 工作正常。我想知道我哪里出错了?提前非常感谢,非常感谢任何帮助。再次感谢。
//JWT
function JWTAuthenticatToken(req, res, next) {
const token = req.cookies.authcookie
jwt.verify(token, process.env.JWT_TOKEN_SECRET, (err, userData) => {
if (err) return res.sendStatus(401).json({ error: "You have to be logged in!" })
req.user = userData
next()
})
}
//client
const deletePost = async (id) => {
const response = await Axios.delete('http://localhost:5000/api/posts/delpost', { postId: id }, { withCredentials: true })
const deleteData = dbdata.map(item => {
if (item._id == response.data._id) {
return response.data
}
else {
return item
}
})
setDBData(deleteData)
}
//express
router.delete('/delpost', JWTAuthenticatToken, async (request, response) => {
console.log(request.body)
try {
const post = await Post.findOne({ _id: request.body.postId }).populate("postedby", "_id")
if (post.postedby._id === request.user.id) {
post.remove({ _id: request.body.postId })
return response.json({ message: "deleted succesfully" })
}
} catch (error) {
return response.json({ message: error })
}
})
【问题讨论】:
-
您应该在 Axios.delete() 调用中将令牌添加到标头中,您的令牌在哪里?
-
function JWTAuthenticatToken(req, res, next) { const token = req.cookies.authcookie jwt.verify(token,process.env.JWT_TOKEN_SECRET,(err,userData) =>{ if(err) return res.sendStatus(401).json({error:"你必须登录!"}) req.user = userData next() }) }
-
JWT 令牌适用于 put post 和 get,但不能删除
-
你能把它添加到你的问题中吗?这是您问题中非常重要的一部分
-
只需将其添加到您的删除中的 Axios.delete() 标题中