【问题标题】:Deleting data from MongoDB using MEAN stack使用 MEAN 堆栈从 MongoDB 中删除数据
【发布时间】:2016-12-31 17:41:11
【问题描述】:

MEAN 堆栈新手在这里。我很难理解删除在 MEAN 中的工作原理。我使用这个SO Q&A 和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);

服务器的“控制器”

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并调用$http的删除请求(?),使用该ID和/api/products/delete:。

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

  3. 服务器的控制器删除数据并返回状态。

我哪里做错了?请帮忙。

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

谢谢。

【问题讨论】:

    标签: javascript node.js mongodb mean-stack


    【解决方案1】:

    我认为您在这里有几处问题。

    在 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 的原因是它更容易。您可以直接在对象本身对象上直接调用不同的 HTTP 动词,例如 product.update 和 product.delete 而不是尝试自己制作 http 调用。我敢肯定,它还有很多其他功能,但它是 Angular 中内置的一个可以利用的功能。我认为其中一个问题是资源的 URL 只需在服务器上以特定方式设置,但我相信有一种方法可以在 Angular 中覆盖它们。

    【讨论】:

    • 非常感谢您的详细解释!这就是: 的含义。 :) 他们从未在我找到的任何资源中真正解释过。我根据您的提示更改了我的代码,它们现在运行良好。谢谢!
    猜你喜欢
    • 2017-01-03
    • 1970-01-01
    • 1970-01-01
    • 2019-07-28
    • 2015-01-16
    • 2016-03-26
    • 2013-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多