尝试连接数据库时没有任何错误提示

时间:2014-06-24 20:17:08

标签: mysql node.js express

我一直在努力让MySQL在节点上工作一段时间。当我运行以下代码时,不会抛出任何错误,但同时没有打印任何控制台消息(除了显而易见的消息)。

var app = require('express')();
var http = require('http').Server(app);
var mysql = require('mysql');

var connection = mysql.createConnection({
  host     : 'localhost',
  user     : 'root', 
  password : '******',
  database : 'blogDB'
});

connection.connect(function(err) {
        if(err) {
            console.log('error when connecting to database:', err);
        }
        console.log('Connected to the database');
    });

var queryString = 'SELECT * FROM blogs';

connection.query(queryString, function(err, rows, fields) {
    if (err) throw err;

    for (var i in rows) {
        console.log('Post: ', rows[i].id);
    }
}); 

connection.end();

http.listen(3306, function(){
        console.log('listening on *:3306');
});

输出:收听*:3306

除此之外,当我在浏览器中转到“localhost:3306”时,会立即开始下载并且网页上不会显示任何内容。下载是没有扩展名的文件,但包含以下内容:

J   
5.6.19  tscvKP3M ÿ÷ €  g?F!q6X:Y2*z mysql_native_password !  ÿ„#08S01Got packets out of order

我不确定这是否相关,但当我没有运行MySQL时肯定没有发生。我不知道如何解决这个问题。什么可能出错的想法?​​

2 个答案:

答案 0 :(得分:1)

这里的错误是你将node.js编码,好像它是程序性的。不是。

connection.connect(function(err) {
    if(err) {
        console.log('error when connecting to database:', err);
    }
    console.log('Connected to the database');

    var queryString = 'SELECT * FROM blogs';

    //change from connection to "this" because you're inside the context of the connection object now
    this.query(queryString, function(err, rows, fields) {
        if (err) throw err;

        for (var i in rows) {
            console.log('Post Titles: ', rows[i].id);
        }
    }); 

});

Node.js使用一系列在任务完成时运行的回调。因此,当您想要在连接到数据库之后执行某些操作时,可以在回调中运行该代码。

您的代码正在尝试连接到数据库,然后在尝试连接到数据库时,您要查询未连接的数据库,依此类推等等。

为了更多地说明原理,节点函数使用以下一般方法。

//1
myObj.myFunc( function( err , foo , bar ) {
    //A
});

//2
myObj.myOtherFunc( function( err , someVar ) {
    //B
});

1将始终在2.之前运行.A和B可以按任意顺序运行,具体取决于1和2何时完成执行。 A总是在1完成后运行。 B将在2完成后继续运行。

希望这有助于清理事情;)

答案 1 :(得分:0)

事实证明,MySQL和应用程序使用相同的端口运行(3306)。将应用程序的端口更改为3307就可以了。