使用 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."});
}
});
}
我是这样理解的。这是正确的吗?
Controller JS 获取要删除的 ID 并使用所述 ID 和 /api/products/delete:
调用 $http 的删除请求(?)。 =18=]
Node Server 看到我调用了 '/api/products/delete:' 并将请求传递给 Server 的 Controller 完成请求。
服务器的控制器删除数据和returns状态。
我哪里错了?请帮忙。
此外,我看到一些帖子说 $resource
比 $http
效果更好。为什么?
谢谢。
我认为你在这里有一些错误。
要在 Express 中使用 params
,您需要在路线中添加一些可以替换的东西。即 /api/:id
express 用你传入的任何内容替换 :id
所以如果你发送 /api/1
,request.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.update
和 product.delete
而不是尝试自己制作 http 调用。我确信它的功能远不止于此,但它是 Angular 中内置的一项可以利用的功能。我认为其中一个问题是资源的 URL 必须在服务器上以特定方式设置,但我相信有一种方法可以在 Angular.
中覆盖它们
这里是 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."});
}
});
}
我是这样理解的。这是正确的吗?
Controller JS 获取要删除的 ID 并使用所述 ID 和
/api/products/delete:
调用 $http 的删除请求(?)。 =18=]Node Server 看到我调用了 '/api/products/delete:' 并将请求传递给 Server 的 Controller 完成请求。
服务器的控制器删除数据和returns状态。
我哪里错了?请帮忙。
此外,我看到一些帖子说 $resource
比 $http
效果更好。为什么?
谢谢。
我认为你在这里有一些错误。
要在 Express 中使用 params
,您需要在路线中添加一些可以替换的东西。即 /api/:id
express 用你传入的任何内容替换 :id
所以如果你发送 /api/1
,request.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.update
和 product.delete
而不是尝试自己制作 http 调用。我确信它的功能远不止于此,但它是 Angular 中内置的一项可以利用的功能。我认为其中一个问题是资源的 URL 必须在服务器上以特定方式设置,但我相信有一种方法可以在 Angular.