我想使用 nodejs 以刷新率显示来自 MySQL 的数据。我已经完成了以下编码并获得了结果。但问题是,如果我在浏览器的一个选项卡中打开 localhost:8000/?id=1,它会显示来自 MySQL 的 id 1 数据,但是如果我在另一个选项卡上打开 localhost:8000/?id=2,它会显示以下数据id 2 但同时,第一个选项卡也开始显示 id 2 的数据。我需要在不同选项卡的 URL 中显示来自 MySQL 的特定 ID 的数据。
在 server.js 我写
var app = require('http').createServer(handler),
网址 = 要求(“网址”),
io = require('socket.io').listen(app),
fs = 要求('fs'),
mysql = 要求('mysql'),
连接数组 = [],
连接 = mysql.createConnection({
主机:'本地主机',
用户:'根',
密码: '',
数据库:'nodetest'
}),
POLLING_INTERVAL = 3000,
轮询定时器;
连接.连接(功能(错误){
控制台日志(错误);
});
app.listen(8000);
变量编号;
函数处理程序(req,res){
var url_parts = url.parse(req.url, true);
变种查询 = url_parts.query;
如果(查询.id){
id = 查询.id;
控制台.log(id);
}
fs.readFile('client.html',
功能(错误,数据){
如果(错误){
控制台日志(错误);
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('错误',
功能(错误){
控制台日志(错误);
更新套接字(错误);
}).on('结果',
功能(用户){
users.push(user);
})。结束',
功能() {
如果(connectionsArray.length){
pollingTimer = setTimeout(pollingLoop, POLLING_INTERVAL);
更新套接字({
用户:用户
});
}
});
};
io.sockets.on('连接',
功能(套接字){
console.log('连接数:' + connectionsArray.length);
如果(!connectionsArray.length){
轮询循环();
}
socket.on('断开连接',
功能() {
var socketIndex = connectionsArray.indexOf(socket);
console.log('socket = ' + socketIndex + '断开连接');
if (socketIndex >= 0) {
connectionsArray.splice(socketIndex, 1);
}
});
console.log('新的套接字已连接!');
connectionsArray.push(socket);
});
var updateSockets = 函数(数据){
data.time = 新日期();
连接数组.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>