【问题标题】:How do I push mongodb data?如何推送 mongodb 数据?
【发布时间】:2019-04-30 07:47:11
【问题描述】:

所以我开发了一个 web 应用程序作为 Handlebars、Express 和 Mongoose/MongoDB 的爱好。

该应用让用户创建一个帐户,然后发布广告供其他用户查看和回复。

用户发布的所有广告都显示在索引页面上。因此,对于此 Web 应用程序上的所有用户来说,这是一个共同的视图。我对 Web 开发比较陌生,所以构建这样一个简单的应用程序花了我一段时间,但我学到了很多东西!

现在我面临的问题是,当用户 A 在用户 B 登录并且当前位于索引页面(列出所有已发布广告的页面)上发布广告时,它不会显示给用户B 除非用户 B 刷新页面。确实如此,因为只有当索引页面的路线被点击时,它才会查询所有广告,并且刷新基本上是点击我得到的索引路线。但我不希望那样。如果任何用户有新广告,我希望它在用户 B 的索引和几乎每个用户的索引上显示新广告。

所以我做了一些研究/阅读,我了解到我可以通过学习在 mongodb 上使用触发器来做到这一点,比如创建某种触发器,当发布新广告时执行某些操作。我喜欢这个想法,但找不到资源来学习如何使用这样的东西。

我被建议的另一个选项是使用 socket.io,但我也无法理解如何使整个广告文档作为套接字工作。我迷路了,实现这个为所有用户动态加载广告的功能将完成我的这个爱好项目,并将帮助我在当地社区找到一份初级开发工作。

我请求 stackoverflow 的社区指导我如何执行此操作以及我可以使用哪些资源来了解它。

【问题讨论】:

    标签: javascript node.js mongodb express web-applications


    【解决方案1】:

    socket.io 似乎是适合您的情况的最佳解决方案。您希望使用 socket.io 做的是每次用户发布广告时,您使用 socket.io 通知其余用户有更新。

    如果您不想使用套接字发送整个文档,您可以使用套接字通知客户端,并且在客户端每次收到来自服务器的此类通知时,您将要么

    a) 刷新页面(不建议,因为它会使用户体验不愉快),这更容易实现

    b) 您可以使用 Ajax 请求从您的服务器获取新数据并即时更新字段(这样可以提供更好的用户体验)。

    【讨论】:

      【解决方案2】:

      最佳方式 您可以在客户端使用 短轮询 概念在 1 或 2 秒后请求新数据(无论需要多少)。 Gmail 用于新收件箱邮件也以特定方式使用sync 方法。只需向服务器询问新数据

      第二个选项在下面进行

      在服务器端
      index.html 页面提供给用户 A(现在已登录)。
      一些用户 B 插入数据
      维护一个函数或一个 cron 作业(检查 Total Ads 的计数)让我们说每 1 分钟左右
      如果与之前的总计数相比计数发生变化,请更新它并获取新的 mlab 文档并将其发送到函数,假设 push_new_ads 将通过 socket.io 同步到客户端


      在客户端

      使用 socket.io 将 client_total_countserver_local_count push_new_ads 同步,如果计数发生变化,请进行简单的 fetch api 调用以获取数据并将其附加到先前获取的数组中

      没有这种方法可以直接监听mongodb的变化,但是可以使用tailable cursors从oplog触发一些变化

      【讨论】:

        猜你喜欢
        • 2020-06-19
        • 1970-01-01
        • 2017-09-19
        • 1970-01-01
        • 2020-06-04
        • 2015-02-09
        • 2015-11-10
        • 2017-09-17
        相关资源
        最近更新 更多