如何将直播数据集成到nodeJS中并表达
How to integrate live data to nodeJS and express
我正在使用 express 处理我的网络应用程序的所有路由。我也在使用 firebase 来存储我所有的数据。
所以我想这样拆分我的代码:
index.js
:节点应用程序,路由并从 firebase 获取数据。将数据发送到视图。
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 会产生此错误。
那么解决方法是什么?在 client.js
中使用 firebase,因此它可以实时更新显示,但我的代码结构变得有点奇怪。
client.js
现在负责数据,显示,而index.js
只负责路由?
最佳做法是什么?您将如何组织此类项目的代码?
提前致谢。
使用http,您不能随心所欲地向客户端发送数据。客户端必须提出特定请求,然后您才能 return 来自该请求的数据,并且只能在该请求的生命周期内使用。
因此,对于 http,您必须提交 http 请求以获取一些数据,然后查询数据库以获取与特定 http 请求所要求的内容相匹配的适当数据。
如果您希望能够在发生变化时向客户端发送数据,那么您可能需要使用 webSocket。使用 webSocket,客户端与服务器建立连接并保持连接有效,然后任何一方都可以向另一方发送消息。在您的特定实例中,只要数据库中发生某些更改,您就可以将该更改传递给每个连接的客户端。当客户端 Javascript 收到此更改时,它可以更新当前显示的页面。
使 webSockets 更容易的一个通用库是 socket.io 库,它与 node.js 配合得很好。在这种情况下,您将在代码中(而不是在请求处理程序中)监听数据库更改,然后在发生更改时将其发送到每个连接的 webSocket。
我正在使用 express 处理我的网络应用程序的所有路由。我也在使用 firebase 来存储我所有的数据。
所以我想这样拆分我的代码:
index.js
:节点应用程序,路由并从 firebase 获取数据。将数据发送到视图。
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 会产生此错误。
那么解决方法是什么?在 client.js
中使用 firebase,因此它可以实时更新显示,但我的代码结构变得有点奇怪。
client.js
现在负责数据,显示,而index.js
只负责路由?
最佳做法是什么?您将如何组织此类项目的代码?
提前致谢。
使用http,您不能随心所欲地向客户端发送数据。客户端必须提出特定请求,然后您才能 return 来自该请求的数据,并且只能在该请求的生命周期内使用。
因此,对于 http,您必须提交 http 请求以获取一些数据,然后查询数据库以获取与特定 http 请求所要求的内容相匹配的适当数据。
如果您希望能够在发生变化时向客户端发送数据,那么您可能需要使用 webSocket。使用 webSocket,客户端与服务器建立连接并保持连接有效,然后任何一方都可以向另一方发送消息。在您的特定实例中,只要数据库中发生某些更改,您就可以将该更改传递给每个连接的客户端。当客户端 Javascript 收到此更改时,它可以更新当前显示的页面。
使 webSockets 更容易的一个通用库是 socket.io 库,它与 node.js 配合得很好。在这种情况下,您将在代码中(而不是在请求处理程序中)监听数据库更改,然后在发生更改时将其发送到每个连接的 webSocket。