在指定路径时,为什么不快速删除请求?

时间:2017-03-21 15:59:03

标签: node.js mongodb rest express database

所以我可以在使用下面的代码时删除数据条目。它会查找_id为' 1'的条目。并删除它。但是,如果客户位于' / people'。

app.delete('/people', (req, res)=>{
db.collection('people').deleteOne({
    _id: '1'
},
(err, result) => {
    if(err) return res.send(500, err)
    res.send('Entry has been deleted')  
})
})

但是,如果客户端导航到' / people /:_ id'要查看数据条目并尝试然后尝试从该URL路径中删除该命令未经过的条目。如果我在邮递员中尝试它,它会通过,但它不能在浏览器中工作。

app.delete('/people/:_id', (req, res)=>{
var id = (req.params.id)
db.collection('people').deleteOne({
    _id: '1'
},
(err, result) => {
    if(err) return res.send(500, err)
    res.send('Entry has been deleted')  
})
})

如果您没有明确导航到其位置,那么您是否只能删除一个条目?或者我错误地设置了终点?还有最后一个问题我如何设置多个删除按钮。我想要一个按钮删除一个指定条目,另一个按钮删除所有条目。

如果您想查看完整的代码库,请在评论中告诉我。谢谢。

1 个答案:

答案 0 :(得分:1)

在浏览器中导航到网址会执行GET请求,但您的路由仅设置为允许DELETE个请求(app.delete(...))。

有几种方法可以解决这个问题:

  • 声明 GETDELETE路线。他们可以使用相同的处理函数:

    let handler = (req, res) => {
      var id = (req.params.id)
      ...
    };
    
    app.delete('/people/:_id', handler);
    app.get('/people/:_id', handler);
    
  • 使用method-override,但我不确定这是否适用于GET次请求(可能需要您使用POST)。< / p>

  

我想要一个按钮删除一个指定条目,另一个按钮删除所有条目。

您可以使用已经提到过的app.delete('/people', ...)。您不是只删除一个条目,而是全部删除它们。因此,一个按钮会请求/people/ID,另一个按钮会请求/people