繁体   English   中英

节点mysql似乎无法连接

[英]node-mysql can't seem to connect

我遇到了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');

问题是您的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 )。 甚至有一节专门针对您的问题,标题为“事件驱动的异步回调”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM