Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node.js/Express和mongoose:Make一个";“可观察的”;mongodb连接,自动拉入新数据?_Javascript_Node.js_Mongodb_Mongoose - Fatal编程技术网

Javascript Node.js/Express和mongoose:Make一个";“可观察的”;mongodb连接,自动拉入新数据?

Javascript Node.js/Express和mongoose:Make一个";“可观察的”;mongodb连接,自动拉入新数据?,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我使用的是MEAN Stack,我使用mongoose对我的mongodb数据库执行异步请求。我现在在angular前端有一个图表,它显示了mongodb查询中的一些数据。问题是,数据每1分钟更新一次,我想每15分钟自动提取并刷新图表。 是否有可能在猫鼬身上以一种自动的方式反映这一点?或者人们通常如何认识到这一点?我认为有不同的方法: 1.我可以在Angular frontend中每隔15分钟执行一次http请求,但这可能不是一种好的方式,正如我所听说的,http请求是可观察的,这就像是在源ap

我使用的是MEAN Stack,我使用mongoose对我的mongodb数据库执行异步请求。我现在在angular前端有一个图表,它显示了mongodb查询中的一些数据。问题是,数据每1分钟更新一次,我想每15分钟自动提取并刷新图表。 是否有可能在猫鼬身上以一种自动的方式反映这一点?或者人们通常如何认识到这一点?我认为有不同的方法:

1.我可以在Angular frontend中每隔15分钟执行一次http请求,但这可能不是一种好的方式,正如我所听说的,http请求是可观察的,这就像是在源api中构建套接字流,是真的吗


2.如果这些可观察对象跟踪变化,那么使用mongoose跟踪mongodb内部的新数据与前端之间仍然没有任何联系(前端不知道任何有关新数据的信息,因为数据是从API发送的)。我可以尝试一些“推送”或刷新计时器,触发api请求,并从后端每隔1分钟左右执行一次api函数,但我不知道如何做,因为承诺只是一次性触发的,无法观察到。。。也许这适用于回调?在Node.js/Express和mongoose中是如何做到这一点的?

我相信您最好的选择是从后端推动更改,而不是依赖轮询数据

  • 当您订阅observable时,angular HttpClient只执行HTTP调用。这将导致只执行一个请求,因此没有您提到的套接字流。每隔15分钟左右轮询一次后端确实不太理想,因为更优雅的解决方案是在发生更改时立即获取更改

  • 我认为您应该研究websockets()并在新数据准备就绪时从后端推送通知。这将允许您立即使用更改更新UI。您可以使用Socket.IO()并在每次更新数据库时发布新消息。IO比我找到的常规websocket API更容易实现,如果websocket不可用,它将退回到其他长轮询机制。(在这里的SO线程中进一步解释:。在RxJs中,有一个专用的可观察对象,您可以使用它来订阅您的websocket流并接收通过您的websocket推送的新事件:。如果您选择这样做,则设置您自己的可观察对象以订阅您的websocket事件也非常简单