Express REST API - 删除方法

时间:2014-05-30 00:08:13

标签: api rest express mongoose http-delete

我对我的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'});
        }
    }       
   });
});

1 个答案:

答案 0 :(得分:1)

mongodb中的_id值不是字符串,它们是ObjectId类的实例,并且它们无法与=====运算符一起正常工作。这完全是一件麻烦事。但无论如何,在比较之前尝试将它们转换为字符串:singlesignup._id.toString() === req.params.id。要确保从长远来看真正正确,请务必处理nullstringObjectId的所有情况。考虑一个帮助程序库,例如objectid