4

nodeにはいくつかのmysqlモジュールがあり、純粋なjsが実装されているもの(node-mysqlなど)もあれば、c libmysqlに基づいているものもあります。

より「クリーン」に見える余分なmysqlライブラリを必要としないため、node-mysqlを非常に好みます。しかし、接続とクエリでタイムアウト機能がサポートされていないことにも気付きました。これは、環境によっては問題を引き起こす可能性があります。

私の質問は次のとおりです。このタイムアウトの問題をきれいに解決した人はいますか?

4

2 に答える 2

1

これを修正するために行ったことは、エラー メッセージを確認し、必要に応じて再接続することでした。

これは、彼らがhttps://github.com/felixge/node-mysql#server-disconnectsで提案する方法です

ドキュメントが変更された場合のサンプルコードは次のとおりです

function handleDisconnect(connection) {
  connection.on('error', function(err) {
    if (!err.fatal) {
      return;
    }

    if (err.code !== 'PROTOCOL_CONNECTION_LOST') {
      throw err;
    }

    console.log('Re-connecting lost connection: ' + err.stack);

    connection = mysql.createConnection(connection.config);
    handleDisconnect(connection);
    connection.connect();
  });
}

handleDisconnect(connection);
于 2013-04-18T21:23:01.333 に答える
0

メソッド createConnection の代わりにメソッド mysql.createPool を使用すると、同じ問題が発生しました。

これは私のコードです。

/*jslint node: true */
'use strict';
var Q = require('q');

var mysql = require('mysql');
var _config;
var env = process.env.NODE_ENV || 'development';
if (env === 'development') {
  _config = {
    host     : 'localhost',
    user     : 'root',
    charset : 'latin1',
    password : '123456',
    database : 'DEVDB',
    connectionLimit: 10
  };
}else {
  _config = {
    host : 'PRODUCTIONHOST',
    user     : 'root',
    charset : 'latin1',
        password : 'PRODUCTIONPASS',
    database: 'PRODUCTIONDB',
    connectionLimit: 10
  };
}

var _pool = mysql.createPool(_config);

var runquery = function() {
  var deferred = Q.defer();
  var args = Array.prototype.slice.call(arguments);

  //console.log(args);
  args.push(function(err, results){
    if (err) {
      deferred.reject(new Error(err));
    } else {
      deferred.resolve(results);
    }
  });

  _pool.query.apply(_pool, args);

  return deferred.promise;
};


module.exports = runquery;

使用例;

runquery('select id from users where mail = ?', 'eugenioclrc')
.then(function(rows){
  console.log(rows);
});
于 2014-09-15T14:51:33.423 に答える