2017-05-08 66 views
0

在表格中顯示來自貓鼬的數據。如何使刪除按鈕才能正常工作,從表中刪除所選元素貓鼬 - 刪除選定元素

的index.html

<div class="col-md-12 column list-group"> 
     {% for note in notes %} 
     <div class="list-group-item"> 
      <div>Note from <em><strong>{{ note.memberName }}</strong></em> on: {{ note.createdOn.toDateString() }}`` 
       - for project: <strong>{{ note.project }}</strong></div> 
      <div><strong>Work yesterday:</strong> {{ note.workYesterday }}</div> 
      <div><strong>Work today:</strong> {{ note.workToday }}</div> 
      <div><strong>Impediment:</strong> {{ note.impediment }}</div> 

      <form action="/delete" method="post"> 
       <button class="btn btn-danger" type="submit">DELETE</button> 
      </form> 
     </div> 
     {% endfor %} 

index.js

router.post('/delete', function(req, res, next) { 
var id = req.body.id; 
Standup.findByIdAndRemove(id).exec(); 
res.redirect('/'); 
}); 

image preview

+0

你會得到任何錯誤嗎? – Karim

+0

你的問題是什麼? –

回答

0

目前尚不清楚,但根據您提供的代碼,它似乎並沒有發送您要刪除的筆記的ID到您的服務器。你可以做到這一點的一種方法是通過添加一個隱藏的表單字段與id note的值。例如你的方式都像這樣(假設你有機會獲得note.id在客戶端:

<form action="/delete" method="post"> 
    <input type="hidden" name="id" value="{{ note.id }}"> 
    <button class="btn btn-danger" type="submit">DELETE</button> 
</form> 

當您提交表單這樣,你會在發送註釋的id的值您的服務器的請求主體和能夠從您的req.body訪問

至於其他的答案已經提到的,你也應該提供一個回調的第二個參數findByIdAndRemove,因爲它是異步的,例如:。

router.post('/delete', function(req, res, next) { 
    var id = req.body.id; 
    Standup.findByIdAndRemove(id, function (err, deletedStandUp) { 
     // handle any potential errors here 
     res.redirect('/');   
    }); 
}); 

這樣,直到刪除完成或引發錯誤,您的重定向纔會發生。因此,當您的'/'路線呈現時,它將具有最新的數據。

最後,我還建議讓你的路由更加RESTful,並使方法DELETE和路由名稱與該控制器方法處理的資源相關(在這種情況下,它將是/note。但是這不是必要的修復你當前的問題

+0

謝謝@Shaka,您的回放正是我所需要的。 這個隱藏領域的技巧非常棒! – perija

0

你想要做

findByIdAndRemove(id,function(){ 
     res.redirect('/'); 
}); 

這樣,它只會在刪除項目後重定向到網頁。第二個參數是回調。

0

你應該等待刪除請求的回調:

router.post('/delete', function(req, res, next) { 
    var id = req.body.id; 
    Standup.findByIdAndRemove(id, function (err, deletedStandUp) { 
     if(err){ 
     res.status(500); 
     } 
     res.redirect('/');   
    }); 
}); 

您還可以添加狀態碼404如果請求的對象沒有找到,但似乎有必要也沒有,因爲這是一個刪除。所以它實際上取決於你的需求:

router.post('/delete', function(req, res, next) { 
    var id = req.body.id; 
    Standup.findByIdAndRemove(id, function (err, deletedStandUp) { 
     if(err){ 
     res.status(500); 
     } else if(!deletedStandup){ 
     res.status(404); 
     } 
     res.redirect('/');   
    }); 
}); 

以另一種方式刪除請求與刪除更好的利用,而不是職位:

router.delete(function (req, res) { 
    var id = req.params.startup_id 
    ... 
}); 
+0

謝謝Dromat非常明確的解釋,問題解決了:) – perija

0

你會需要傳遞消息的ID後面的URL參數或表單的一部分(看起來像使用body,所以它應該是一個輸入)。

你可以通過使用note._id(我相信這是自動生成貓鼬)來獲取id。