Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.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 如何使用expressjs为我的视图获取实时数据更新?_Javascript_Node.js_Express_Websocket - Fatal编程技术网

Javascript 如何使用expressjs为我的视图获取实时数据更新?

Javascript 如何使用expressjs为我的视图获取实时数据更新?,javascript,node.js,express,websocket,Javascript,Node.js,Express,Websocket,我想设置一个动态页面(无需重新加载页面) 首先,我要渲染仪表板视图,然后当我在数据库中获得更新(来自另一个用户的更新)时,我希望渲染的仪表板使用实时更新显示的数据 我是websocket的初学者,我尝试过使用它,但似乎我需要在呈现的仪表板页面中添加一条消息,每当我想从数据库中获取新数据时,就会触发express ws的套接字 那么,有没有一种更优雅的方法可以从数据库订阅仪表板数据更新,而不必从客户端执行setInterval?(在Angular 6中,我知道您可以使用Subscribe/Obse

我想设置一个动态页面(无需重新加载页面)

首先,我要渲染仪表板视图,然后当我在数据库中获得更新(来自另一个用户的更新)时,我希望渲染的仪表板使用实时更新显示的数据

我是websocket的初学者,我尝试过使用它,但似乎我需要在呈现的仪表板页面中添加一条消息,每当我想从数据库中获取新数据时,就会触发express ws的套接字

那么,有没有一种更优雅的方法可以从数据库订阅仪表板数据更新,而不必从客户端执行
setInterval
?(在Angular 6中,我知道您可以使用
Subscribe/Observables
来实现这一技巧,但我不知道expressjs中有任何等效的功能)

仪表板视图(引擎=ejs):


...
{ %>
...
API路线:

app.ws('/dashboard', (ws, req) => {
    ws.on('connexion', (msg) => {
      log.debug('api.get(/dashboard)');
      return db.getDashboard()
          .then((dashboard) => {
            // return ws.render('pages/dashboard', dashboard);
            return ws.send(dashboard);
          })
          .catch((err) => { log.error(err); });
    });
});
此外,我似乎无法在我的路线中一次性渲染和绑定websocket(这比渲染仪表板然后创建websocket更方便)


PS:websocket真的是这里的解决方案吗?(我觉得有点被这种解决方案卡住了)

什么是错误堆栈?websocket连接必须由客户端(从浏览器)启动因此,您不能在服务器上的路由处理程序中启动它们。您必须从网页中的`开始启动它们。您也不能在路由处理程序中创建连接侦听器,因为这样每次客户端点击该路由时都会添加一个新的连接侦听器。您可以在创建连接后立即在代码中在路由外部创建连接侦听器websocket服务器。@jfriend00所以,我别无选择,只能呈现我的页面,然后从客户端执行eventEmitter(设置间隔)?如果是,我是否需要手动更新数据(用jquery覆盖视图中的所有动态变量)?@SagarRanaMagar没有错误,这只是我目前可以得到的代码。你可以从网页创建webSocket或socket.io连接,然后服务器可以随时通过该连接将数据发送到网页。当网页接收到数据时,它会将其插入网页。什么是错误堆栈?webSocket连接必须是initi由客户端指定(从浏览器)因此,您不能在服务器上的路由处理程序中启动它们。您必须从网页中的`开始启动它们。您也不能在路由处理程序中创建连接侦听器,因为这样每次客户端点击该路由时都会添加一个新的连接侦听器。您可以在创建连接后立即在代码中在路由外部创建连接侦听器websocket服务器。@jfriend00所以,我别无选择,只能呈现我的页面,然后从客户端执行eventEmitter(设置间隔)?如果是,我是否需要手动更新数据(用jquery覆盖视图中的所有动态变量)?@SagarRanaMagar没有错误,这只是我目前能得到的代码。你可以从网页创建webSocket或socket.io连接,然后服务器可以随时通过该连接将数据发送到网页。当网页收到数据时,它会将其插入网页。