我对我的API的删除方法感到困惑。我的应用程序要求用户登录,然后他可以添加课程。这些课程存储在User模型内的嵌套数组中。我希望用户能够从视图中取消(删除)课程,然后从服务器上的用户配置文件中删除课程。虽然我比较的变量是相同的,但我得到了404响应事件。
这是我删除特定课程的ajax调用:
jQuery.ajax({
url: "/test/signups/5387c1a0fb06e48f4658170c",
type: "DELETE",
success: function (data, textStatus, jqXHR) {
console.log("Post resposne:");
console.dir(data);
console.log(textStatus);
console.dir(jqXHR);
}
});
这是我的删除方法:
app.delete('/test/signups/:id', isLoggedIn, function(req, res) {
User.findOne({'_id': req.user.id }, function(err, user) {
if (err)
return done(err);
if (user) {
var found = false;
var singlesignup = user.signup.filter(function(e){ return e._id == req.params.id })[0]
user.signup.forEach(function (singlesignup, index) {
if (singlesignup._id === req.params.id) {
found = index;
}
});
if(found) {
user.signup.splice(found, 1);
res.json(200, {status: 'deleted'});
} else {
res.json(404, {status: 'invalid survey question deletion'});
}
}
});
});
答案 0 :(得分:1)
mongodb中的_id
值不是字符串,它们是ObjectId
类的实例,并且它们无法与==
或===
运算符一起正常工作。这完全是一件麻烦事。但无论如何,在比较之前尝试将它们转换为字符串:singlesignup._id.toString() === req.params.id
。要确保从长远来看真正正确,请务必处理null
,string
或ObjectId
的所有情况。考虑一个帮助程序库,例如objectid。