[英]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."});
}
});
}
这就是我对此的理解。 这个对吗?
控制器JS使用该ID和/api/products/delete:
来获取要删除的ID,并调用$ http的delete request(?)。
节点服务器看到我调用了“ / api / products / delete:”,并将请求传递到服务器的控制器以完成请求。
服务器的控制器删除数据并返回状态。
我哪里做错了? 请帮忙。
另外,我一直看到一些帖子说$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.update
和product.delete
类的对象本身上直接调用不同的HTTP动词,而不必尝试自己编写HTTP调用。 我敢肯定,除了它之外,还有很多其他功能,但是它内置于Angular中,可以利用。 我认为要抓住的一个问题是,只需在服务器上设置资源的URL即可,但是我相信在Angular中有一种方法可以覆盖它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.