2014-09-21 57 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