2014-09-21 63 views
0

我一直有問題與節點mysql,我一直無法獲得與它的連接。這裏是我的代碼:node-mysql似乎無法連接

var mysql = require('mysql'); 
var pool = mysql.createPool({ 
    connectionLimit: 10, 
    user: 'node', 
    password: 'pass', 
    host: 'localhost', 
    port: 3306, 
    database: 'store' 
}); 

exports.getUser = function(user, pass){ 
    var sql = 'SELECT * FROM store.users WHERE user = \'' + user + '\' AND password = \'' + pass + '\''; 
    pool.query(sql, function(err, rows, fields) { 
     if(err){ 
     return err; 
     }else{ 
      return rows.length; 
     } 
    }); 
}; 

只是有點似乎不能拋出一個錯誤或任何東西。在數據庫中的密碼是明文進行測試,所以如果我把它叫做:

var pool = require('./database'); 
var message = pool.getUser('test','test'); 

回答

1

的問題是在數據庫功能異步執行的函數的getUser立即返回。所以,當查詢函數完成時,您的getUser函數早已退出。

你可以解決這個問題通過沿着傳遞一個回調函數與您的用戶名和密碼,就像這樣:

var mysql = require('mysql'); 

var pool = mysql.createPool({ 
    connectionLimit: 10, 
    user: 'root', 
    password: '', 
    host: '127.0.0.1', 
    port: 3306, 
    database: 'store' 
}); 

exports.getUser = function(user, pass, cb){ 
    var sql = 'SELECT * FROM store.users WHERE user = \'' + user + '\' AND password = \'' + pass + '\''; 

    pool.getConnection(function(err, connection) { 
     if(err) throw err; 

     // Use the connection 
     connection.query(sql, function(err, rows) { 
      if(err) throw err; 
      cb(rows.length); 

      // And done with the connection. 
      connection.release(); 
     }); 
    }); 

}; 

然後,你打電話給你的功能是這樣的:

var pool = require('./database'); 
pool.getUser('someuser', '1234', function(result){ console.log(result); }); 

要獲得一個關於nodejs的異步性質的句柄,我建議看看The Node Beginner Book(http://www.nodebeginner.org)。甚至有一部分解決你的問題,標題爲「事件驅動的異步回調」。

+0

有趣。我仍然在搞這個,不能弄明白。它只是我還是node-mysql文檔有點鬆懈?結果是一個對象嗎?什麼是屬性?出於某種原因,我可以訪問message.sql,如果我是從直接的mysql連接執行的,但不是池。 – dkran 2014-09-22 02:09:26

+0

您正在解決其他問題。我回答了你原來的問題嗎?如果是這樣,你可能想通過接受我的答案來表明。謝謝。 – HeadCode 2014-09-22 21:16:26