【问题标题】:Express REST API - Delete MethodExpress REST API - 删除方法
【发布时间】:2014-07-19 15:34:46
【问题描述】:

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

【问题讨论】:

    标签: api rest express mongoose http-delete


    【解决方案1】:

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

    【讨论】:

    • 谢谢。现在将 _id 转换为字符串会给我一个 200 响应(耶),但由于某种原因,所选课程仍在服务器上持续存在
    • 拼接后并没有真正保存用户。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-01
    • 2012-08-31
    • 1970-01-01
    • 2021-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多