来自MySQL的Node JS实时结果

时间:2015-10-03 19:54:51

标签: javascript mysql node.js

我正在尝试在表格中显示我的数据库的结果。我希望用户能够在不刷新页面的情况下查看表中所做的每个更改(插入,更新或删除)。

我的第一个问题是如何在表格中获取我的数据库数据。我还希望用户采取的操作能够从其他用户处清晰可见(例如编辑,删除,创建)。

enter image description here

这是我的server.js

    var io=require('socket.io'), mysql=require('mysql');
    var express = require('express');
    var connection = mysql.createConnection({
       host     : 'localhost',
       user     : 'root',
       password : '',
       database : 'lolast'
   });

   connection.connect(function(err) {
      if(err) {
          console.log('error when connecting to db:', err);
          setTimeout(handleDisconnect, 2000);
      } 
  });

 var ws=io.listen(3000);
 var socketCount = 0
 ws.on('connection', function(socket) {
     socketCount++

     // Let all sockets know how many are connected
    ws.emit('users connected', socketCount);

    socket.on('disconnect', function() {
       // Decrease the socket count on a disconnect, emit
        socketCount--
        ws.emit('users connected', socketCount)
     });
 });

这是我的客户方:

    <script  src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
    <script src="http://127.0.0.1:3000/socket.io/socket.io.js"></script>
    <script>
    $(document).ready(function(){
       // Connect to our node/websockets server
       var socket = io.connect('http://localhost:3000');

       // New socket connected, display new count on page
       socket.on('users connected', function(data){
          $('#usersConnected').html('Users connected: ' + data)
       })

    })
   </script>
   <div id="usersConnected"></div>

我的用户计数器工作正常,现场显示结果但我的sql数据有问题。

如果有人帮助我,我会非常感激。

3 个答案:

答案 0 :(得分:2)

答案是mysql上的复制日志或bin-logs。看一下这个回购:https://github.com/numtel/mysql-live-select

答案 1 :(得分:1)

这是一个不完整的答案,但至少可以让你开始解决这个问题 -

  • MySQL对此没有任何开箱即用的支持。无论你做什么都需要基于轮询,这不是不可能扩展的,但需要非常聪明地使用MySQL来扩展。
  • 有更好的存储产品。我认为Firebase专注于此(由谷歌购买?)而且我很肯定有一个AWS产品可以做到这一点。
  • 即使像Redis这样的NoSQL也有支持。我认为MongoDB可以。
  • 可能还有其他中间件解决方案。可能存在将自己创建和维护表的框架。尝试在其他语言中搜索与语言无关的框架或框架,看看是否有任何指向正确的方向。
  • 您自己的解决方案将如下所示:您应该对其他用户可见的所有查询都需要进入表格,或者在表格中跟踪时间戳,客户可以查询因为他们上次收到的数据。这是 hard 可以扩展而没有严重的MySQL chops(但如果你很了解MySQL,则可以扩展)。 (根据我在MySQL创业公司的经验做出这些说法)。

答案 2 :(得分:-1)

我正在使用firebase获取实时事件以更改数据库中的值。 对于视图透视,我已经使用Bootstrap的DataTable连接了firebase。 你可以在这里检查它的小用途。 Firebase是最好的解决方案之一。 https://www.firebase.com/docs/web/libraries/angular/guide/synchronized-arrays.html