使用 MEAN 堆栈从 MongoDB 中删除数据

Deleting data from MongoDB using MEAN stack

这里是 MEAN 堆栈新手。我很难理解删除在 MEAN 中的工作原理。我使用此 SO Q&A and tutorial 作为指南,但每当我对其进行测试时,我都会收到一条错误消息,指出无法删除数据。有人可以告诉我我做错了什么吗?

这是我的代码:

控制器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);

服务器的"Controller"

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. Controller JS 获取要删除的 ID 并使用所述 ID 和 /api/products/delete: 调用 $http 的删除请求(?)。 =18=]

  2. Node Server 看到我调用了 '/api/products/delete:' 并将请求传递给 Server 的 Controller 完成请求。

  3. 服务器的控制器删除数据和returns状态。

我哪里错了?请帮忙。

此外,我看到一些帖子说 $resource$http 效果更好。为什么?

谢谢。

我认为你在这里有一些错误。

要在 Express 中使用 params,您需要在路线中添加一些可以替换的东西。即 /api/:id express 用你传入的任何内容替换 :id 所以如果你发送 /api/1request.params.id 是 1

所以第一个问题是你的路线是

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

tha 对 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 的原因是它更容易。您可以直接在对象本身对象上直接调用不同的 HTTP 动词,例如 product.updateproduct.delete 而不是尝试自己制作 http 调用。我确信它的功能远不止于此,但它是 Angular 中内置的一项可以利用的功能。我认为其中一个问题是资源的 URL 必须在服务器上以特定方式设置,但我相信有一种方法可以在 Angular.

中覆盖它们