Express REST API - 删除方法

Posted

技术标签:

【中文标题】Express REST API - 删除方法【英文标题】:Express REST API - Delete Method 【发布时间】: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');
        
           
   );
);

【问题讨论】:

【参考方案1】:

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

【讨论】:

谢谢。现在将 _id 转换为字符串会给我一个 200 响应(耶),但由于某种原因,所选课程仍在服务器上持续存在 拼接后并没有真正保存用户。

以上是关于Express REST API - 删除方法的主要内容,如果未能解决你的问题,请参考以下文章

mongose + express 写REST API

节点 express REST API 中的 CORS 错误(PATCH 请求)

使用 PayPal REST API 通过 Express Checkout 测试拒绝付款

如何使用 Advanced REST Client 或 Postman 测试 Express/node REST API 后端?

Express API REST 过滤数据 MongoDB

使用 Express 和 NodeJS 构建 REST API 的最佳实践