javascript - 使用 Angular HttpClient 在 DELETE 请求完成后执行某些操作

标签 javascript node.js angular typescript angular-httpclient

我有一个按钮,可以在单击时删除一个项目。我想在操作完成后显示一个简单的 alert('Item deleted') 警报。但是我似乎无法让它发挥作用。请注意,该项目已被删除。

这是我尝试过的:

deleteItem 我组件中的函数

deleteItem(id: number) {
    this.eventsService
      .deleteEventById(id)
      .subscribe(
        res => console.log(res),
        err => console.log(err),
        () => alert('Item deleted')
      );
  }

没有任何内容打印到控制台,也没有显示任何警报。

deleteEventById 我服务中的函数

deleteEventById(id: number) {
  return this.http
    .delete(`/api/events/${id}`, this.headerForPrivateCalls)
    .pipe(
      catchError(this.handleError),
    );
}

api 路由(如果重要的话)

router.delete('/events/:id', authCheck, (req, res) => {
    connection((client) => {
        client.db('gordes').collection('events')
        .deleteOne({id: +req.params.id})
        .then(() => {
            res.status(204);
        })
        .catch((err) => {
            sendError(err, res);
        });
    })
});

最佳答案

您的 deleteEventById 服务不会向 Observable 返回任何内容。 您将需要添加一个 .map()

    deleteEventById(id: number) {
       return (this.http
        .delete(`/api/events/${id}`, this.headerForPrivateCalls)
        .map(response => response.json())
        .pipe(
           catchError(this.handleError),
        );
      )
   }

编辑

问题似乎出在 Node 后端:

你不返回任何东西

res.status(204);

使用:

res.status(204).send();

关于javascript - 使用 Angular HttpClient 在 DELETE 请求完成后执行某些操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48661903/

相关文章:

javascript - 如何将 Promise.all() 限制为每秒 5 个 promise ?

javascript - async/await 返回 Promise { <pending> }

json - Javascript从node/express服务器读取gz文件

html - 如何使用带 Angular 表情符号选择器制作输入字段或文本区域?

javascript - Angular - 如何从 JS 包中导入模块

javascript - Jquery - 如何禁用整个页面

javascript - 为什么js振荡器在使用后停止播放声音?

javascript - jQuery: NewBie 问题,如何在jquery 中调用另一个类的函数?

javascript - 从网页获取数据并使用ajax将其发布到服务器是否安全?

Angular Testing 和 HttpClient : TypeError: Cannot read property 'get' of undefined