将mysql数据库打印到socket.io和node.js中的html页面
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将mysql数据库打印到socket.io和node.js中的html页面相关的知识,希望对你有一定的参考价值。
我试图能够将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:
');
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>
客户端显示它正在连接到服务器但它没有在客户端上显示查询结果
您可以尝试以下更改:
在服务器中:
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:
');
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>
我看到以下错字: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);
});
首先,您尝试两次创建与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:
');
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.
});
以上是关于将mysql数据库打印到socket.io和node.js中的html页面的主要内容,如果未能解决你的问题,请参考以下文章
使用 Node.js/socket.io 和 php/mysql 的 Web 应用程序
使用 socket.io 在 Node.js 中使用 MySql 数据库进行 HTML5 页面日志记录
如何使用socket.io mysql nodejs express删除帖子
Socket.io、Node.js:如何在 javascript.js 中将 javascript 变量传递给 mysql 查询?