【问题标题】:Inform Angular frontend when state in Node backend (MongoDB) changes当节点后端(MongoDB)中的状态发生变化时通知 Angular 前端
【发布时间】:2019-01-03 04:24:51
【问题描述】:

当 MongoDB 中的状态发生变化时,我想实时更新 Angular 前端。我的选择是什么?除了例如,还有其他方法吗?使用socket.io?

场景 - 用户创建提醒,设置电子邮件到达邮箱的日期。现在,对于添加和删除提醒,我可以在前端模拟实时,因为我知道用户何时调用导致状态更改的某些操作,但我在每个提醒旁边都有一个文本 - “电子邮件已发送”或“电子邮件尚未发送”。因为我使用 cron 作业在我的后端发送电子邮件,所以前端无法知道它。

这是我编写后端代码的第一个项目,所以我只是想知道除了实现大量冗余内容以使一个小功能正常工作之外,还有其他方法吗?

NodeJs + Express + Angular6 + MongoDB

【问题讨论】:

  • socket.io 确实是从后向前发送消息的一致解决方案。你真的应该考虑一下。
  • @jbrtmd,是的,它在我的雷达之内,但现在我只有一个小功能要实现,所以需要寻找其他方法,如果有的话
  • 您还可以每 X 秒/分钟/小时创建一个 AJAX 调用来检查提醒状态(根据您的 cron 作业)。使用此解决方案,您可以摆脱 socket.io,但它不会是实时的。

标签: javascript node.js angular mongodb express


【解决方案1】:

查看Change Streams MongoDB 3.6 最新最酷的功能,以访问数据库中的实时更改。

示例 Node.js 代码

const collection = db.collection('example');
const changeStream = collection.watch();
const next = await changeStream.next();

【讨论】:

  • 听起来是这里的最佳选择!我只需要检查是否可以通过 Mongoose 完成。谢谢!
  • 这不只是后端进程吗?你如何通知你的前端?
  • 为此目的使用套接字。
  • 先生,如果没有这项技术,就无法通知前端服务器上检测到的数据库更改。
【解决方案2】:

您可以使用 Angular 和 rxjs 实现轮询服务。该服务将在特定时间间隔检查您的数据库。

this.subscription = Observable.interval(1000).startWith(1)
.mergeMap(() => this.statusService.getStatus())
.subscribe((next) => {
 this.state = next;
 })

您可以使用rxjs interval operator 进行投票

【讨论】:

  • 是的,我担心这样的事情是唯一的选择。好的,我等着看有没有人提出别的建议
猜你喜欢
  • 2021-05-11
  • 1970-01-01
  • 2020-10-21
  • 1970-01-01
  • 2020-08-22
  • 1970-01-01
  • 1970-01-01
  • 2021-06-20
  • 1970-01-01
相关资源
最近更新 更多