【问题标题】:DELETE API not working删除 API 不起作用
【发布时间】:2017-12-25 13:15:24
【问题描述】:

我只想从数据库中删除一个用户。使用 MEAN Stack,mlab。

这是我的删除 API

router.delete('/delete/:id', function (req, res) {
    User.findByIdAndRemove(req.params.id, function (err, user) {
        if (err) { 
        return res.status(500).send("There was a penter code hereroblem deleting the user.");
    } else {
        res.status(200).send("User "+ user.username +" was deleted.");
        res.json({ user: user });
    }
    });
});

这是我正在调用的服务

deleteUser(_id){
    let headers = new Headers();
    return this.http.delete(this.deleteurl+this._id)
    .map(res => res.json());
  }

我的 HTML 删除按钮

button type="button" class="btn btn-primary" (click)="deleteUser(_id)">Delete User</button>

这是我在 HTML 中的按钮上调用的 deleteuser 函数

deleteUser(_id){
    this.authService.deleteUser('localhost:3000/users/delete'+'/'+_id).subscribe(data=> {
      console.log(data,"data from db")
      this.user();
    },
    err => {
      console.error(err, "error" )
    }
  )};

目前,我将 id 作为文档的 id 编号,即硬编码 id 的值

这是我遇到的错误

DELETE http://localhost:3000/users/delete/undefined 500 (Internal Server Error)

【问题讨论】:

  • 只需记录错误并检查您的服务器日志
  • 您的deleteUser 方法应该使用this.deleteurl + _id(而不是this._id)。
  • 我刚刚进行了这些更改,控制台结果仍然相同错误有点像这样 DELETE localhost:3000/users/delete/localhost:3000/users/delete/... 404 (Not Found)
  • 为什么是localhost:3000 ???只使用 /users/delete 看看它是否有效
  • this.authService.deleteUser('/users/delete'+'/'+_id)

标签: node.js angular api express http-delete


【解决方案1】:

在您的 deleteUser 函数中,您没有访问函数参数,但您尝试使用 this 运算符访问局部变量。此变量不存在,这就是您在链接中得到未定义的原因。

去掉this部分,让函数参数与url一起使用。

deleteUser(_id){
    let headers = new Headers();
    return this.http.delete(this.deleteurl+_id)
    .map(res => res.json());
}

【讨论】:

  • 我刚刚进行了这些更改,控制台结果仍然相同错误有点像这样 ** DELETE localhost:3000/users/delete/localhost:3000/users/delete/… 404 (Not Found) **
  • 我只注意到你有两个deleteUser 函数,一个在服务中,一个在组件中。 this 运算符的问题出在服务中。同样在此服务功能中,您希望删除 ID,仅此而已,但您当前正在为完整链接 plus 提供 id。尝试用this.authService.deleteUser(_id).subscribe调用服务函数
  • 更改更新:我将按钮功能更改为此,以便将OnDeleteUser(_id){ this.authService.deleteUser(_id).subscribe(data=&gt; { console.log(data,"data from db") this.user(); }, err =&gt; { console.error(err, "error" ) } 和服务 deleteUser 功能区分为deleteUser(_id){ let headers = new Headers(); return this.http.delete(this.deleteurl+_id) .map(res =&gt; res.json()); },这就是我在 component.ts 文件中传递的 _id: '5a3aaa1da685361dccddbbad';
  • 好的,函数调用仍然出错?我很确定这些更改后的输出应该有所不同
  • ** DELETE localhost:3000/users/delete/undefined 500 (Internal Server Error) ** 错误现在不同了,但确实存在 :-/
【解决方案2】:

500 来自这些行的内部服务器错误。

User.findByIdAndRemove(req.params.id, function (err, user) {
    if (err) { 

    return res.status(500).send("There was a penter code hereroblem deleting the user.");


}

【讨论】:

    猜你喜欢
    • 2014-12-01
    • 2016-05-20
    • 2020-08-06
    • 2021-05-17
    • 2012-10-26
    • 1970-01-01
    • 2016-02-11
    • 2013-02-17
    • 1970-01-01
    相关资源
    最近更新 更多