リフレッシュ レートで 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>