如何推送mongodb数据?

时间:2018-11-28 11:51:05

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

因此,我开发了一个Web应用程序作为对Handlebars,Express和Mongoose / MongoDB的兴趣爱好。

该应用程序使用户可以创建一个帐户,然后发布广告以供其他用户查看和响应。

用户发布的所有广告都显示在索引页面上。因此,对于此Web应用程序上的所有用户而言,这都是通用视图。我是Web开发的新手,因此构建这样一个简单的应用程序花了我一段时间,但是男孩我学到了很多东西!

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

因此,我做了一些研究/阅读,并了解到可以通过学习在mongodb上使用触发器来实现,就像创建某种触发器,以便在发布新广告时可以执行某些操作。我喜欢这个主意,但没有找到资源来学习如何使用这种东西。

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

我请求stackoverflow的社区来指导我如何进行此工作以及可以使用哪些资源来学习它。

2 个答案:

答案 0 :(得分:0)

socket.io似乎是适合您情况的最佳解决方案。您想对socket.io进行的操作是,每当用户发布一个广告,您就使用socket.io通知其他用户有更新。

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

a)刷新页面(不建议使用,因为它会使用户感到不愉快),易于实现

OR

b)您可以使用Ajax请求从服务器中获取新数据并实时更新字段(这将带来更好的用户体验)。

答案 1 :(得分:0)

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

OR 要通过下面的第二个选项

在服务器端
index.html页面提供给用户A(现已登录)。
某些用户B插入数据
维持职能或定期任务(检查广告总数),可以说每隔1分钟左右
如果与之前的total_count相比计数发生变化,请更新它并获取新的mlab文档并将其发送给function,我们说 push_new_ads ,它将通过socket.io同步到客户端


在客户端

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

没有这样的方法可以直接监听mongodb中的更改,但是您可以使用可尾光标从oplog触发一些更改