删除订单有效,删除咖啡无效。相同的功能

时间:2019-09-26 19:06:13

标签: node.js mongodb express ejs

我必须在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返回订单已删除

Orders Collection. This means visiting localhost:3000/orders/Delta returns Order deleted

//代码无法正常工作:

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)
  })
})

Coffees collection. Can't delete from this table. Postman DELETE to localhost:3000/coffees/Jamaica returns {} and console.log(res.body) returns undefined

咖啡收集。无法从该表中删除。将邮递员DELETE删除到localhost:3000 / coffees / Jamaica返回{},console.log(res.body)返回未定义

postman returns {} meaning undefined

有人看到错了吗?如果您需要更多代码,请告诉我。

谢谢。

2 个答案:

答案 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)
      })
    })