0

socket.io を使用して MySQL データベースに接続する Node.js スクリプトを開発しました。ただし、Titanium クライアント アプリケーションを使用してサーバーに接続しようとすると、作成した接続メソッドが渡されます。エラー メッセージやメッセージは表示されず、ソケットはスクリプトを呼び出さずに閉じます。私の問題が何であるかを誰かが理解していますか?参考までに、私のコードは次のとおりです。

    var app = require('net')
      , fs = require('fs')
      , Client = require('mysql').Client
      , client = new Client();  

    client.user = 'user';
    client.password = 'password'; // Obviously this is not my real password

    var sockets_list = [];

    var server = app.createServer(function (socket) {
      sockets_list.push(socket);
      socket.write("Hello Client\r\n");

      socket.on('data', function(data) {
        console.log(data);
        for (var i = 0; i < sockets_list.length; i++) {
            sockets_list[i].write(data);
        }


      });

      client.connect(function(err, results) {
        if (err) {
            console.log("ERROR: " + err.message);
            socket.write("NO!\r\n");
            throw err;
        }
        console.log("connected.");
        socket.write("Got through here\r\n");
        clientConnected(client);
      });

      socket.on('end', function() {
        var i = sockets_list.indexOf(socket);
        sockets_list.splice(i, 1);
      });


    });



    server.listen(8080);

    clientConnected = function(client)
    {
        client.query('USE db', function(err, results) {
            if (err) {
                console.log("ERROR: " + err.message);
                throw err;
            }
        });
    };

このコードのどこが間違っているのか誰かが教えてくれたら、大歓迎です。ありがとうございました。

よろしく

ジャイロ・キャプテン


前述したように、node-mysql-libmysqlclient を使用してこのスクリプトの作業を続けていますが、実際にサーバーに接続する際に問題が発生しています。私の接続スクリプトはここに添付されています:

exports.CallStoredProcedureSync = function (test) {
test.expect(12);

var conn;
var result;
var row;
var rows;
var host = "localhost";
var user = "test";
var password = **********;
var database = *******;

var sockets_list = [];
conn = mysql.createConnectionSync();
conn.connectSync(host, user, password, database, 0, 0, conn.CLIENT_MULTI_RESULTS);

if (!conn.connectedSync()) 
{   
sys.puts("Connection error " + conn.connectErrno + ": " + conn.connectError);
socket.write("Connection error " + conn.connectErrno + ": " + conn.connectError);
process.exit(1);
}
// More code here
} 

ただし、接続後に定義されたコードに実際にアクセスすることはできません。誰かが私が間違っているところを教えてくれたら、とても感謝しています。記録のために、https://github.com/Sannis/node-mysql-libmysqlclient/blob/master/tests/complex/test-call-stored-procedure の node-mysql-libmysqlclient のテスト コードを使用しています。 js . ありがとう。

よろしく

ジャイロ・キャプテン

4

1 に答える 1

1

これがnode-mysqlclientを使用した問題の私の試みです。これは、dbに接続し、選択したテーブル内のすべてをプルバックしてから、ダミーの文字列をソケットに書き込みます。また、socket.ioもご覧ください...質問で言及しましたが、このアプリでは使用されていません。

var app = require('net')
  , mysql = require('mysql-libmysqlclient')
  , conn = mysql.createConnectionSync();


conn.connectSync('localhost', 'user', 'password', 'database');
conn.setCharsetSync('utf8');

var sockets_list = [];

var server = app.createServer(function (socket) {
  sockets_list.push(socket);
  socket.write("Hello Client\r\n");

  socket.on('data', function(data) {
    console.log(data);
    for (var i = 0; i < sockets_list.length; i++) {
      sockets_list[i].write(data);
    }
  });

  clientConnected = function() {
    conn.query('SELECT * FROM table', function(err, results) {
      if (err)
        throw err;
      else {
        results.fetchAll(function (err, rows) {
        if (err)
          throw err;
        // print out database info
        console.log(rows);
        socket.write('socket writes here');
      });
      }
    });
  };

  clientConnected();

  socket.on('end', function() {
    var i = sockets_list.indexOf(socket);
      sockets_list.splice(i, 1);
  });
});

server.listen(8080);

于 2012-01-04T21:28:13.570 に答える