Mongodb和Express从_id

时间:2018-02-16 14:26:41

标签: node.js mongodb express handlebars.js crud

我是Express和数据库的新手。我尝试使用Mongo DB(不是Mongoose),Express,Node和Handlebars创建一个简单的CRUD待办事项列表。

我可以从输入表单创建项目并将它们成功保存到Mongo数据库和页面。我无法根据页面和数据库上的按钮单击删除每个项目。理想情况下,我希望根据Mongo创建的_id来定位它们。

我认为问题可能与我尝试选择每件商品的方式有关。任何建议或更简单的方法来实现这一点都会很棒!

这是我的Express代码:

// Connecting Mongo DB
MongoClient.connect(url, (err, client) => {
  if (err) return console.log(err)
  db = client.db('todoitems')
})

 // Save items to DB from form
app.post('/items', (req, res) => {
  db.collection('items').save(req.body, (err, result) => {
    if (err) return console.log(err)
    console.log(req.body, {_id: req.body._id})
    res.redirect('/')
  })
})

// Delete item on click from DB
app.delete('/items/:id', (req, res) => {
  db.collection('items').remove({_id: req.body.id}, (err, result) => {
    if (err) return console.log(err)
    console.log(req.body)
    res.redirect('/')
  })
})

// Get items from DB to page
app.get('/', (req, res) => {
  db.collection('items').find().toArray((err, result) => {
    if (err) return console.log(err)
    res.render('index', {
      layout: false,
      items: result
    });
  })
})

这是Handlebars文件中的代码:

  <form action="/items" method="POST">
    <input type="text" placeholder="item" name="item">
    <input type="hidden" id="date" name="date" value="CurrentDate">
  </form>

  <ul>
    {{#each items}}
      <li>
        <span>{{item}} |</span>
        <span>{{date}}</span>
        <button id={{_id}}>x</button>
      </li>
    {{/each}}
  </ul>

1 个答案:

答案 0 :(得分:2)

如果要按_id删除,则需要传递ObjectID(id)而不是“字符串”id,例如:

remove({_id: mongodb.ObjectID( req.params.id)} ...

所以,你的代码应该是:

app.delete('/items/:id', (req, res) => {
  db.collection('items').remove({_id: mongodb.ObjectID( req.params.id)}, (err, result) => {
    if (err) return console.log(err)
    console.log(req.body)
    res.redirect('/')
  })
})