簡體   English   中英

使用MEAN堆棧從MongoDB刪除數據

[英]Deleting data from MongoDB using MEAN stack

MEAN堆棧新手在這里。 我很難理解刪除在MEAN中的工作原理。 我正在使用此SO Q&A教程作為指南,但是每當進行測試時,我都會收到一條錯誤消息,指出無法刪除數據。 有人可以告訴我我做錯了什么嗎?

這是我的代碼:

控制器JS

$scope.deleteProduct = function (value, idx) {

    var this_id = value._id;

    // delete
    $http.delete('/api/products/delete:' + this_id)
        .success(function (data) {
            console.log(data);
        })
        .error(function (data) {
            console.log('Error: ' + data);
        })
}

節點服務器

app.delete('/api/products/delete:', productController.delete);

服務器的“控制器”

module.exports.delete = function (req, res) {
    Service.remove({
        _id: req.params._id
    }, function (err, service) {
        if (err) {
            res.send(err);
        }
        else {
            res.json({message: "Delete successful."});
        }
    });
}

這就是我對此的理解。 這個對嗎?

  1. 控制器JS使用該ID和/api/products/delete:來獲取要刪除的ID,並調用$ http的delete request(?)。

  2. 節點服務器看到我調用了“ / api / products / delete:”,並將請求傳遞到服務器的控制器以完成請求。

  3. 服務器的控制器刪除數據並返回狀態。

我哪里做錯了? 請幫忙。

另外,我一直看到一些帖子說$resource$http更好。 為什么?

謝謝。

我認為您在這里有幾處錯誤。

在Express中,為了使用params您需要在路由中放置一些可以替換的東西。 /api/:id express用傳遞的內容替換:id ,因此,如果發送/api/1 ,則request.params.id為1

所以第一個問題是你的路線是

app.delete('/api/products/delete:', productController.delete);

這對Express毫無意義。 我想你要

app.delete('/api/products/:id', productController.delete);

現在req.params.id應該包含您發送的參數。 請注意,我在此處刪除了下划線。 你可以用

app.delete('/api/products/:_id', productController.delete); 並根據需要保留下划線。

我認為第二個錯誤是您的Angular代碼。 你有:在你的電話應該只是

$http.delete('/api/products/' + this_id)

現在,您將使用要刪除的ID發送路線,即

/api/products/1

現在,Express可以將其映射到/api/products/:id並替換ID,現在您的控制器應該可以工作了。 除非有其他問題。

編輯

我對Angular不太熟悉,但是我認為人們說使用$resource的原因是它更容易。 您可以直接在諸如product.updateproduct.delete類的對象本身上直接調用不同的HTTP動詞,而不必嘗試自己編寫HTTP調用。 我敢肯定,除了它之外,還有很多其他功能,但是它內置於Angular中,可以利用。 我認為要抓住的一個問題是,只需在服務器上設置資源的URL即可,但是我相信在Angular中有一種方法可以覆蓋它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM