2016-10-02 5 views
0

私は現在、潜在的に多くのユーザを持つモバイルアプリのnode.jsバックエンドを開発中です。しかし、node.jsを開発するのは初めてのことです。私はtutorialに続いて、mysqlプール経由でmysqlデータベースに接続する方法を説明していました。Node.jsおよびRestifyを使用したMySQL DBプール

私は単一のmysql接続を作成し、自分のルート経由でクエリを実行できます。私は、チュートリアルで説明したファイル構造を確立すると問題が発生した

dbConnect 
-[models] 
--users.js 
-db.js 
-server-ks 

私は、MySQLデータベースの接続に関するエラーメッセージを取得していないです - 私は間違ったパスワードを入力した場合でも。

// server.js 

///////////////////////////// basic setup /////////////////////////////////// 

var restify = require('restify'); 
var bodyParser = require('body-parser'); 
var mysql = require('mysql'); 
var db = require('./db'); 
var users = require('./models/users'); 



///////////////////////////// initilisation of the server /////////////////////////////////// 
var server = restify.createServer({ 
    name: 'testUsers', 
}); 
server.use(restify.bodyParser({ mapParams: true })); 

/////////////////////////////  Säuberung der URL  ////////////////////////////////////////// 
server.pre(restify.pre.sanitizePath()); 

/////////////////////////////  MySQL Instanz starten ////////////////////////////////////////// 

db.connect(db.MODE_PRODUCTION, function (err) { 
    if (err) { 
     console.log('Unable to connect to MySQL.') 
     process.exit(1) 
    } else { 
     server.listen(8080, function() { 
      console.log('Listening on port 8080 ...') 
     }) 
    } 
}) 


/////////////////////////////  implementation of the routes /////////////////////////////////// 
function send(req, res, next) { 
var test = users.getAll(); 
    res.json({ test: 'Hello ' + req.params.name }); 
    return next(); 
}; 

マイDB.jsファイルには、次のようになります。

var mysql = require('mysql'), 
 
     sync = require('async') 
 
    
 
    var PRODUCTION_DB = 'userDB', 
 
     TEST_DB = 'userDB' 
 
    
 
    exports.MODE_TEST = 'mode_test' 
 
    exports.MODE_PRODUCTION = 'mode_production' 
 
    
 
    var state = { 
 
     pool: null, 
 
     mode: null, 
 
    } 
 
    
 
    exports.connect = function (mode, done) { 
 
     state.pool = mysql.createPool({ 
 
      connectionLimit: 50, 
 
      host: 'localhost', 
 
      user: 'user', 
 
      password: 'password', 
 
      database: 'userDB' // test 
 
    
 
      //mode === exports.MODE_PRODUCTION ? PRODUCTION_DB : TEST_DB 
 
     }) 
 
    
 
     
 
     state.mode = mode 
 
     done() 
 
    } 
 
    
 
    exports.get = function() { 
 
     return state.pool 
 
    }

それはチュートリアルでは、MySQLのプールとのNode.jsを利用して重要な部分を免れていること、だろうか?

少なくともこの質問にお答えしていただきありがとうございます。

MySQLデータベースへのパフォーマンスの良い接続を作成するには、より良い方法が後継(?)できますか?

答えて

1

プールオブジェクトの作成は実際にデータベースに接続されていないようです。大きなヒントは、createPool関数が非同期ではないということです。これは実際にその時点で接続していた場合に期待されるものです。

クエリを実行するには、返されたプールオブジェクトを使用する必要があります。これは非同期です。 documentationから

var mysql = require('mysql'); 
var pool = mysql.createPool({ 
    connectionLimit : 10, 
    host   : 'example.org', 
    user   : 'bob', 
    password  : 'secret', 
    database  : 'my_db' 
}); 

pool.query('SELECT 1 + 1 AS solution', function(err, rows, fields) { 
    if (err) throw err; 

    console.log('The solution is: ', rows[0].solution); 
}); 
関連する問題