如何将实时数据集成到nodeJS并进行expression
我正在使用快递处理我的networking应用程序的所有路由。 我也使用firebase来存储我的所有数据。
所以我想分裂我的代码是这样的:
index.js
:节点应用程序,路由并从firebase获取数据。 发送数据到视图(S)。
index.html
:显示我的应用程序(一个视图),并包括client.js
client.js
:使用index.js
(firebase)中的数据,并使用它在index.html
生成一个图表。
我喜欢这个结构,因为index.js
负责路由和获取数据, index.html
和client.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。