Javascript HTTP DELETE的RESTful API不检查null
我目前正在为一个Web服务编写一个RESTful API,但我遇到了麻烦。我试图删除一封邮件,但首先我想检查该邮件是否存在。我的问题是,它不会检查邮件是否为空,也不会以404响应。我正在与《快车》和《猫鼬》合作Javascript HTTP DELETE的RESTful API不检查null,javascript,rest,express,mongoose,http-delete,Javascript,Rest,Express,Mongoose,Http Delete,我目前正在为一个Web服务编写一个RESTful API,但我遇到了麻烦。我试图删除一封邮件,但首先我想检查该邮件是否存在。我的问题是,它不会检查邮件是否为空,也不会以404响应。我正在与《快车》和《猫鼬》合作 router.delete('/:id',(req,res)=>{ const{id}=req.params; Mail.findById(id) .exec() 。然后((邮件)=>{ 如果(!邮件){ console.log(mail)//返回null 返回资源状态(404); }
router.delete('/:id',(req,res)=>{
const{id}=req.params;
Mail.findById(id)
.exec()
。然后((邮件)=>{
如果(!邮件){
console.log(mail)//返回null
返回资源状态(404);
}
})
.那么(
Mail.deleteOne({u id:id})
.exec()
.然后(()=>{
res.status(200).json({
邮件:“邮件已删除”,
});
})
.catch((错误)=>{
res.status(500).json({error:err});
})
);
});
我认为您必须在first-then块中执行代码的删除部分,作为else语句。您没有返回下一个then块可以使用的任何内容
你可以做:
Mail.findById(id)
.exec()
.then((mail) => {
if (!mail) {
console.log(mail) // returns null
return res.status(404).send() //need to send response;
}
Mail.deleteOne({ _id: id })
.exec()
.then(() => {
res.status(200).json({
message: 'Mail deleted',
});
})
}).catch((err) => {
res.status(500).json({ error: err });
})
专业提示:如果您不知道,请学习异步等待。代码将看起来更干净
那么它看起来是这样的:
router.delete('/:id', async (req, res) => {
const { id } = req.params;
try {
const mail = await Mail.findById(id);
if(!mail) {
return res.status(404).send();
}
await Mail.deleteOne({_id: id});
res.status(200).json({
message: 'Mail deleted',
});
} catch(e) {
res.status(500).json({ error: err });
}
你能在你的问题中添加关于预期行为和实际行为的信息吗?是的,对不起。如果邮件为空,我希望以404的HTTP状态码响应。否则,应继续删除找到的邮件谢谢。您是对的,使用async/await时看起来更干净。我会调查的。它也适用于您给meGreat的代码,很乐意帮助:)!