2013-08-24 115 views
0

我正在使用Express.js構建一個小應用程序。我已經成功實現了允許我將新條目添加到數據庫的功能。Express JS - 從mysql中刪除條目

我目前正試圖從用戶點擊一個按鈕時從MySQL數據庫中刪除一個條目。這是執行的代碼:

client.query('DELETE FROM humans WHERE id= ?', [req.params.id], function(err, result) { 
     if (err) { 
      throw err; 
     } 

     res.redirect('/humans'); 

我知道代碼正確執行,因爲我被重定向到正確的頁面。不過,我的入口仍然在數據庫中。

+0

顯而易見的問題是'id'被傳遞set/correct? – WiredPrairie

+0

@WiredPrairie - yes;我有一個隱藏的輸入字段,其值爲id,名稱屬性設置爲id,因此當我發佈該表單時,它將被傳遞;當我檢查頁面時,它是可見的,值是正確的 –

+0

看起來像我的問題的答案是「排序」給你接受。 :) – WiredPrairie

回答

1

從評論推演到你的問題我猜你是使用POST請求從表單發送id。在req.body中查找後續參數(如果使用express.bodyParser中間件)。因此:

client.query('DELETE FROM humans WHERE id= ?', [req.body.id], function(err, result) { 
    if (err) { 
     throw err; 
    } 

    res.redirect('/humans'); 
}); 

如果您發送GET請求,參數將在req.query中找到。

+0

它現在完美的作品!從你剛剛解釋的內容可以看出,無論何時發送POST請求,我都不能再使用req.params訪問參數。我必須使用req.body。? –

+0

不,你永遠不能通過req.params訪問表單數據。表單數據我們通常以url編碼的字符串形式發送,可以在主體(用於POST)或查詢字符串(用於GET)中發送。考慮'/ foo/bar'和'/ foo?value = bar'。第一個請求可以通過像express中的'/ foo /:value'這樣的路由來處理,參數可以在'req.params.value'處找到。然而,第二個請求發送查詢字符串中的值,因此可以在'req.query.value'中找到該值。 –

+0

(當然,同樣的推理適用於POST和req.body,但是由於身體不是url的一部分,所以很難在這種簡短格式中演示) –