我有一条帖子路线,人们可以在其中添加评论。我添加功能目标是帖子的唯一ID以将其删除。该帖子被删除,但又被再次调用,我相信当它检查时,该帖子不再存在,并返回错误。在我的代码中哪里可以调用两次?
然后我检查它是否已经在数据库中删除了。
我正在学习猫鼬和路由,但是逻辑看起来不错吗?但是如果我缺少某些东西,请纠正我。
我正在使用Postman测试后端逻辑。尝试了两个不同的用户,但结果是相同的。
我的代码:
// @route DELETE api/posts/:ID
// @desc Delete post
// @access private
router.delete("/:id", passport.authenticate("jwt", {session: false}), (req, res) => {
Profile.findOne({user: req.user.id})
.then(profile => {
Post.findById(req.params.id)
.then(post => {
//Check for post owner
if(post.user.toString() !== req.user.id){
return res.status(401).json({notauthorised: "User not authorised"});
}
// Delete
post.remove().then(() => {
console.log("Success 1")
return res.json({success: true})
});
})
.catch(err = res.status(404).json({postnotfound: "No post found"}))
})
})
控制台错误消息:
Success 1
(node:5228) UnhandledPromiseRejectionWarning: Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
at ServerResponse.setHeader (_http_outgoing.js:470:11)
at ServerResponse.header (D:\Google Drive\Test Lab\Projects\mernTutorial\node_modules\express\lib\response.js:771:10)
at ServerResponse.send (D:\Google Drive\Test Lab\Projects\mernTutorial\node_modules\express\lib\response.js:170:12)
at ServerResponse.json (D:\Google Drive\Test Lab\Projects\mernTutorial\node_modules\express\lib\response.js:267:15)
at post.remove.then (D:\Google Drive\Test Lab\Projects\mernTutorial\routes\api\posts.js:83:36)
at process._tickCallback (internal/process/next_tick.js:68:7)
(node:5228) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with
.catch(). (rejection id: 1)
(node:5228) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
这就是导致我认为某事被两次调用的原因,因为成功1消息出现在末尾,然后出现错误。
我希望删除帖子后,它会以json字符串{success:true}响应用户,但我收到了邮递员{postnotfound:“未找到帖子”}
答案 0 :(得分:0)
我能看到的唯一可能是您的错误的根本原因是
.catch(err = res.status(404).json({postnotfound: "No post found"}))
您正在尝试在catch块的参数中声明一个变量,我认为这是不正确的,但是,您可以在catch参数中包含一个箭头函数,我相信这是此代码段中的catch。 / p>