繁体   English   中英

指定路径后,为什么Express Express删除请求不起作用?

[英]Why doesn't Express delete request work when a path is specify?

因此,在使用下面的代码时,我可以删除数据条目。 它查找_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')  
})
})

那么,如果您没有明确导航到条目的位置,就只能删除该条目吗? 还是我设置的终点不正确? 最后一个问题是我将如何设置多个删除按钮。 我希望一个按钮删除一个指定条目,另一个按钮删除所有条目。

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

在浏览器中导航到URL会执行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 )。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM