我必须在nodejs + express + mongodb中构建一个CRUD,并且具有删除订单的功能(该功能已成功通过参数删除订单),并且该功能的副本适用于“咖啡” MongoDB集合。
第二个返回未定义的值,或简单地返回{}。
首先,我修改了集合,然后将其他来源作为参数。
这是server.js
//此代码有效。
app.delete('/orders/:coffee_id', (req, res) => {
db.collection('orders').findOneAndDelete({name: req.body.coffee_id}, (err, result) => {
if (err) return res.send(500, err)
res.json('Order deleted')
})
})
//订单收集。这意味着访问localhost:3000 / orders / Delta返回订单已删除
//代码无法正常工作:
app.delete('/coffees/:id', (req, res) => {
db.collection('coffees').findOneAndDelete({'name': req.body.name}, (err, result) => {
console.log(res.body) // returns undefined.
if (err) return res.send(500, err)
res.json(req.body)
})
})
咖啡收集。无法从该表中删除。将邮递员DELETE删除到localhost:3000 / coffees / Jamaica返回{},console.log(res.body)返回未定义
有人看到错了吗?如果您需要更多代码,请告诉我。
谢谢。
答案 0 :(得分:0)
这里要注意几件事。
1)您的路由配置了路径参数,但是您尝试引用req.body
中的属性。我不确定这在第一条路线中如何运作,但我希望它不会。您应该使用req.params
来访问路径参数。
app.delete('/orders/:coffee_id', (req, res) => {
db.collection('orders').findOneAndDelete({name: req.params.coffee_id}, (err, result) => {
...
})
})
2)在第二条路由中,您已经声明了路径参数id
,但是您试图访问名为name
的属性。这是实现与“工作”路线不同的地方。如果要使用文档的ObjectId
来执行删除操作,或者是否打算使用文档的name
,则不清楚其表面价值。
使用ObjectId
:
app.delete('/coffees/:id', (req, res) => {
db.collection('coffees').findOneAndDelete({_id: req.params.id}, (err, result) => {
...
})
})
使用name
:
app.delete('/coffees/:name', (req, res) => {
db.collection('coffees').findOneAndDelete({name: req.params.name}, (err, result) => {
...
})
})
这里的要点是,您必须使用与在路径参数中声明的值相同的值来引用路径参数。
/coffees/:id
=> req.params.id
(不是req.params.name
)
答案 1 :(得分:0)
显然我必须定义一个像这样的ObjectId
var ObjectId = require('mongodb').ObjectID; //Include ObjectId
//然后
app.delete('/coffees/:id', (req, res) => {
db.collection('coffees').findOneAndDelete({'_id': ObjectId(req.params.id)}, (err, result) => {
console.log(result)
if (err) return res.send(500, err)
res.json(result.body)
})
})