我試圖從表中顯示我的DB的結果。我希望用戶在不刷新頁面的情況下查看錶中所做的每項更改(插入,更新或刪除)。來自MySQL的節點JS實時結果
我的第一個問題是如何取得我這樣的表格中的數據庫數據。我還希望用戶採取的行動能夠從其他用戶生動地看到(如編輯,刪除,創建)。
這是我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數據有問題。
如果有人幫我,我會非常棒。
當數據改變時,MySQL不會「通知」其他客戶端。爲此,您必須進行一些輪詢並具有決定更改內容的方法(某種'last_updated'列可能),或者直接在您的應用程序中創建一些事件系統,其中更新數據庫的客戶端將觸發事件以告訴其他人重新載入內容。 – jkavalik
這是一個相當困難的問題,MySQL並不完全具備對此的開箱即用支持。我認爲Firebase專注於此? Mongo可能會更好,可能還有其他中間件解決方案。自己的解決方案是建議像jkavalik一樣進行手動輪詢。這是一個惡夢,如果沒有嚴重的MySQL排版,你不會走得太遠。 – djechlin