リフレッシュ レートで nodejs を使用して MySQL からのデータを表示したいと思います。私は次のコーディングを行い、結果を得ました。しかし、問題は、ブラウザの 1 つのタブで localhost:8000/?id=1 を開くと、ID 1 の MySQL からのデータが表示されますが、別のタブで localhost:8000/?id=2 を開くと、次のデータが表示されることです。 id 2 ですが、同時に、最初のタブには id 2 のデータも表示され始めます。異なるタブの URL で特定の ID の MySQL からのデータを表示する必要があります。
私が書いたserver.jsで
var app = require('http').createServer(ハンドラ), url = 必須 ("url"), io = require('socket.io').listen(アプリ), fs = require('fs'), mysql = require('mysql'), connectionsArray = [], 接続 = mysql.createConnection({ ホスト: 'localhost', ユーザー: 'ルート', パスワード: '', データベース: 'nodetest' })、 POLLING_INTERVAL = 3000、 pollingTimer; connection.connect(関数(エラー) { console.log(エラー); }); app.listen(8000); 変数 ID; 関数ハンドラ(req, res) { var url_parts = url.parse(req.url, true); var クエリ = url_parts.query; if (query.id) { id = query.id; console.log(id); } fs.readFile('client.html', 関数(エラー、データ) { もし (エラー) { console.log(エラー); res.writeHead(500); return res.end('client.html の読み込みエラー'); } res.writeHead(200); res.end(データ); }); } var pollingLoop = 関数() { var query = connection.query('SELECT * FROM users WHERE id = ' + id), ユーザー = []; query.on('エラー', 関数(エラー) { console.log(エラー); updateSockets(エラー); }).on('結果', 関数(ユーザー) { users.push(ユーザー); }).on('終了', 関数() { if (connectionsArray.length) { pollingTimer = setTimeout(pollingLoop, POLLING_INTERVAL); updateSockets({ ユーザー: ユーザー }); } }); }; io.sockets.on('接続', 関数 (ソケット) { console.log('接続数:' + connectionsArray.length); if (!connectionsArray.length) { pollingLoop(); } socket.on('切断', 関数() { var socketIndex = connectionsArray.indexOf(socket); console.log('socket = ' + socketIndex + '切断'); if (socketIndex >= 0) { connectionsArray.splice(socketIndex, 1); } }); console.log('新しいソケットが接続されました!'); connectionsArray.push(ソケット); }); var updateSockets = 関数 (データ) { data.time = new Date(); connectionsArray.forEach(関数(tmpSocket) { tmpSocket.volatile.emit('通知', データ); }); };
そしてclient.htmlに私は書いた
<html>
<head>
<script src="socket.io/socket.io.js"></script>
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script type="text/javascript">
var socket = io.connect('http://localhost:8000');
socket.on('notification',
function(data) {
var usersList = "<div>";
$.each(data.users,
function(index, user) {
usersList += "<div><p><span style='width:100px;float:left;text-align:center'>Name :</span>" + user.name + "</p></div>" + "<div><p><span style='width:100px;float:left;text-align:center'>First Name :</span>" + user.flane + "</p></div>" + "<div><p><span style='width:100px;float:left;text-align:center'>Last Name :</span>" + user.lname + "</p></div>";
});
usersList += "</div>";
$('#container').html(usersList);
});
</script>
</head>
<body>
<div id="container">Loading ...</div>
</body>
</html>