1

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

1 に答える 1