使用mongoose删除Express Router对ES8语法不起作用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用mongoose删除Express Router对ES8语法不起作用相关的知识,希望对你有一定的参考价值。
我有这个代码:
router.delete('/:id', (req, res) => {
Input.findById(req.params.id)
.then(Input => Input.remove().then(() => res.json({ success: true })))
.catch(err => res.status(404).json({ success: false }));
});
因为我们在2019年,我认为我应该继续async / await语法,我这样做:
router.delete('/:id', async ({ params }, res) => {
try {
const Input = await Input.findById(params.id);
await Input.remove();
res.json({ success: true });
} catch (error) {
res.status(404).json({ success: false });
}
});
ID按预期收到,但由于某种原因,input.findById返回null,有人知道为什么吗?
答案
你在Input
之前用const Input
阴影findById
。为它使用不同的名称(即使只是小写足够好;记住,最初的上限标识符主要用于构造函数,而不是非构造函数对象):
router.delete('/:id', async ({ params }, res) => {
try {
const input = await Input.findById(params.id);
// ^-------------------------------------------- here
await input.remove();
// ^-------------------------------------------- and here
res.json({ success: true });
} catch (error) {
res.status(404).json({ success: false });
}
});
如果你愿意,顺便说一句,你可以做嵌套解构来挑选id
:
router.delete('/:id', async ({params: {id}}, res) => {
// ^^^^^^^^^^^^^^======================
try {
const input = await Input.findById(id);
// ^=========================
await input.remove();
res.json({ success: true });
} catch (error) {
res.status(404).json({ success: false });
}
});
以上是关于使用mongoose删除Express Router对ES8语法不起作用的主要内容,如果未能解决你的问题,请参考以下文章
使用 mongoldb、mongoose、jade 和 express 通过按钮单击删除条目
如何使用 express .node 、 mongoose 和 ejs 删除对象
使用 Node.js Express Mongoose 删除列表项
使用express框架和mongoose在MongoDB删除数据