RESTful API 对于 HTTP DELETE 不检查 null
RESTful API for HTTP DELETE doesnt check for null
我目前正在为 Web 服务编写 RESTful API,但我遇到了问题。我正在尝试 删除 一封邮件,但首先我想检查邮件是否 存在 。我的问题是它不检查 mail 是否为空并且不响应 404。我正在使用 express 和 mongoose
router.delete('/:id', (req, res) => {
const { id } = req.params;
Mail.findById(id)
.exec()
.then((mail) => {
if (!mail) {
console.log(mail) // returns null
return res.status(404);
}
})
.then(
Mail.deleteOne({ _id: id })
.exec()
.then(() => {
res.status(200).json({
message: 'Mail deleted',
});
})
.catch((err) => {
res.status(500).json({ error: err });
})
);
});
我认为您必须将第一个 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 });
}
我目前正在为 Web 服务编写 RESTful API,但我遇到了问题。我正在尝试 删除 一封邮件,但首先我想检查邮件是否 存在 。我的问题是它不检查 mail 是否为空并且不响应 404。我正在使用 express 和 mongoose
router.delete('/:id', (req, res) => {
const { id } = req.params;
Mail.findById(id)
.exec()
.then((mail) => {
if (!mail) {
console.log(mail) // returns null
return res.status(404);
}
})
.then(
Mail.deleteOne({ _id: id })
.exec()
.then(() => {
res.status(200).json({
message: 'Mail deleted',
});
})
.catch((err) => {
res.status(500).json({ error: err });
})
);
});
我认为您必须将第一个 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 });
}