将mysql数据库打印到socket.io和node.js中的html页面

问题描述 投票:1回答:3

我试图能够将mysql数据打印到html页面只是为了测试它,所以我可以开始学习

更新的代码

这是我在我的server.js上尝试过的

var mysql = require("mysql");
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);

app.get('/', function(req, res){
  res.sendfile('testsql.html');
  //res.sendfile('/login/');
});
http.listen(3000, function(){
  console.log('listening on *:3000');
});
var con = mysql.createConnection({
    host: "localhost",
    user: "root",
    password: "password",
    database: "users"
});


io.on('connection', function (socket) {

    console.log('a client connected');

    con.query('SELECT * FROM users',function(err,rows){
      if(err) throw err;
      console.log('Data received from Db:\n');
      console.log(rows);
      socket.emit('showrows', rows);
    });



});

**这是我的客户代码**

<!doctype html>
<html>
  <head>
    <title>Testing socket.io</title>
  </head>
  <body>
    <h1 id="socketio"> not connected </h1>
    <div id="display"> </div>
    <script src="/socket.io/socket.io.js"></script>
    <script>
      var socket = io();
      socket.on('connect', function() {
        document.getElementById("socketio").innerHTML = "socket connected";
      });
      socket.on('showrows', function(dbData) {
        document.getElementById("display").innerHTML = dbData;
      });
    </script>
  </body>
</html>

客户端显示它正在连接到服务器但它没有在客户端上显示查询结果

html mysql node.js socket.io
3个回答
1
投票

您可以尝试以下更改:

在服务器中:

var con = mysql.createConnection({
    host: "localhost",
    user: "root",
    password: "password",
    database: "users"
});


io.on('connection', function (socket) {

    console.log('a client connected');

    con.query('SELECT * FROM users',function(err,rows){
      if(err) throw err;
      console.log('Data received from Db:\n');
      console.log(rows);
      socket.emit('showrows', rows);
    });



 });

在客户端:

<!doctype html>
<html>
  <head>
    <title>Testing socket.io</title>
  </head>
  <body>
    <h1 id="socketio"> not connected </h1>
    <div id="display"> </div>
    <script src="/socket.io/socket.io.js"></script>
    <script>
      var socket = io();
      socket.on('connect', function() {
        document.getElementById("socketio").innerHTML = "socket connected";
      });
      socket.on('showrows', function(rows) {
        var html='';
        for (var i=0; i<rows.length; i++) {
          html += rows[i].firstname + ' ' + rows[i].lastname + '<br>';
        }  
        document.getElementById("display").innerHTML = html;
        console.log(rows);
      });
    </script>
  </body>
</html>

0
投票

我看到以下错字:socket.brodcast.emit('showrows', rows);应该是socket.broadcast.emit('showrows', rows);

但在你的情况下,你只需要socket.emit('showrows', rows)。为了在客户端听取这个,你需要这样:

socket.on('showrows', function(rows){
    console.log(rows);
    jQuery("#display").append(rows);
});

0
投票

首先,您尝试两次创建与mysql服务器的连接。

而且我相信你有一些错过了你的客户端。你忘了连接到你的socket.io服务器。

var socket = io.connect('http://localhost:3000', {'reconnect': true, 'force new connection': true, 'connect timeout': 1000});

socket.on('showrows', function(rows) {
    jQuery("#display").append(rows);
});

在发出查询结果之前,还应确保客户端已连接到服务器。

io.sockets.on('connection', function (socket) {

   //Run your mysql query method

  //Socket disconnected
    socket.once('disconnect', function () {

    });
});

更新:完成查询后才结束mysql连接。

con.connect(function(err){
  if(err){
    console.log('Error connecting to Db');
    return;
  }
  console.log('Connection established');
});

//Don't recreate a mysql connection


con.query('SELECT * FROM users',function(err,rows){
  if(err) throw err;

  console.log('Data received from Db:\n');
  console.log(rows);
});


con.end(function(err) {
  // The connection is terminated gracefully
  // Ensures all previously enqueued queries are still
  // before sending a COM_QUIT packet to the MySQL server.
});
© www.soinside.com 2019 - 2024. All rights reserved.