如何将实时数据集成到nodeJS并进行expression

我正在使用快递处理我的networking应用程序的所有路由。 我也使用firebase来存储我的所有数据。

所以我想分裂我的代码是这样的:

index.js :节点应用程序,路由并从firebase获取数据。 发送数据到视图(S)。

index.html :显示我的应用程序(一个视图),并包括client.js

client.js :使用index.js (firebase)中的数据,并使用它在index.html生成一个图表。

我喜欢这个结构,因为index.js负责路由和获取数据, index.htmlclient.js处理显示。

不幸的是,这个结构并不适用于Firebase。 由于Firebase在每次修改数据库时都会收到数据,因此以下代码:

 app.get('/moods/get', function(req, res){ moodRef.on('value', function(snapshot){ res.json(snapshot.val()); }) }); 

显示此错误:

 Error: Can't set headers after they are sent. 

我认为这很明显,HTML页面已经显示,所以尝试发送json会产生这个错误。

那么解决scheme是什么? 在client.js使用firebase,所以它可以在现场更新显示,但我的代码结构变得有点怪异。

client.js现在负责数据,显示和index.js只负责路由?

什么是最佳实践? 你将如何组织你的代码这种types的项目?

提前致谢。

有了http,你不能随便发送数据给客户端。 客户端必须提出特定的请求,然后才能从该请求返回数据,并且只能在该请求的生命周期内返回数据。

所以,对于http来说,你必须通过http请求来获取一些数据,然后对数据库进行查询,以获取与特定http请求所要求匹配的适当数据。

如果你希望只要有东西发生变化就可以发送数据给客户端,那么你可能想使用webSocket。 使用webSocket,客户端连接到服务器并保持连接处于活动状态,然后任一端都可以向另一端发送消息。 在您的特定实例中,只要数据库中的某些内容发生更改,就可以将更改发送给每个连接的客户端。 当客户端Javascript收到这个改变时,它可以更新当前显示的页面。

使webSocket更容易的通用库是socket.io库,它可以和node.js一起使用。 在这种情况下,您可以在代码中(而不是在请求处理程序中)监听数据库更改,然后在发生这种情况时将其发送到每个连接的WebSocket。