2017-03-21 83 views
0

所以我可以在使用下面的代碼時刪除一個數據條目。它會查找_id爲'1'的條目並將其刪除。但是,這是如果客戶端位於'/ people'。當指定路徑時,爲什麼不將Express請求刪除?

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

但是,如果客戶端,然後導航到「/人/:_ 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

導航到瀏覽器中的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

相關問題