在套接字发出时间期间使用mysql提取数据的最佳方法是什么?
例如,我将从数据库中检索数据,现在我想在socket.emit('emit_name', function(data){ })上使用该数据。最好的方法是什么?

首先,我测试了一种简单的方法来确定它是否有效,然后从json跳入了复杂的模型。我在“客户端”使用了两个数据作为“类型”和“水果”

var socket = io.connect( 'http://localhost:8080' );
var nameVal = "Type";
var msg = "apple";

socket.emit( 'messages', { type : nameVal, fruit: msg } );


在服务器端

var socket = require( 'socket.io' );
var express = require( 'express' );
var http = require( 'http' );
var app = express();
var mysql = require('mysql');
var server = http.createServer( app );
var io = socket.listen( server );
var pool = mysql.createPool({
connectionLimit : 10,
host: "localhost",
user: "root",
password: "",
database: "mydb"
  }
);


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

console.log( "User connected..!" );

io.client.on( 'messages', function(data) {
console.log( 'Message received ' + data.type + ":" + data.fruit );

  });

});

server.listen(8080);


完成所有这些之后,我刚刚启动了节点服务器,并在页面加载时在套接字上建立了“连接”,但是我在套接字方面的工作根本无法正常工作。服务器端套接字部分的结果(问题)给出了这个错误如下图:-

javascript - 如何使用json数据从客户端发出套接字?-LMLPHP

可能是什么问题,我该如何解决?

最佳答案

这段代码是错误的:

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

console.log( "User connected..!" );

io.client.on( 'messages', function(data) {
console.log( 'Message received ' + data.type + ":" + data.fruit );

  });

});


应该是这样的:

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

    console.log( "User connected..!" );

    socket.on( 'messages', function(data) {
        console.log( 'Message received ' + data.type + ":" + data.fruit );
    });
});


您必须使用传递给socket,...)事件的io.on('connection变量在新连接的套接字上设置事件处理程序。



此外,您的客户代码的这一行:

socket.emit( 'messages', { type : nameVal, fruit: msg } );


可能在套接字完成连接之前运行太早了。 io.connect()是异步的。它不会立即完成。如果尝试在连接之前发送数据,则还没有活动的套接字可以实际发送数据。 socket.io可能会缓存该数据,直到套接字连接为止(您必须检查socket.io代码以确保确定),但是在发送之前在套接字上等待connect事件要安全得多数据。

关于javascript - 如何使用json数据从客户端发出套接字?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37403617/

10-10 00:35
查看更多