提前抱歉 - 第一次使用nodejs
..
我在linux机器上安装了nodejs
和npm
经理。通过npm
我安装了mysql
模块,现在我尝试使用简单代码测试mysql
连接。问题是 - 当运行mysql
相关代码时,没有输出打印到控制台!
源:
var mysql = require("mysql");
console.log('1');
var connection = mysql.createConnection({
host: "127.0.0.1",
user: "xxx",
password: "xxxx",
database: "xxx",
port: 3306
});
console.log('2');
connection.connect(function(err){
if(err){
console.log('Error connecting to Db');
return;
}
console.log('Connection established');
});
console.log('3');
connection.end(function(err) {
console.log('Connection closed');
});
console.log('4');
process.exit();
输出为1234:
以下是已安装的模块:
所以我的问题是 - 为什么没有来自mysql连接的消息?我故意故意输入错误的连接细节 - 没有生成任何消息。
我还尝试将节点作为sudo
运行,并尝试运行nodejs index.js
而不是node index.js
。哦,我还尝试安装并使用nodejs-mysql
模块而不是mysql
。似乎没什么用。
答案 0 :(得分:1)
您正在编写异步代码,因此在强制终止进程之前,您需要等待才能完成这些操作。
你实际上说的是“做这个,做到这一点,做到这一点,然后再回到我身边。现在也关掉一切。”
删除process.exit
来电或将其移至回调函数中,以便在合适的时间触发:
var connection = mysql.createConnection({
...
});
console.log('2');
connection.connect(function(err){
if(err) {
console.log('Error connecting to Db');
return;
}
console.log('Connection established');
console.log('3');
connection.end(function(err) {
console.log('Connection closed');
console.log('4');
process.exit();
});
});
这种积极的嵌套和重新嵌套是promises之类存在的原因。 Bluebird是一个很好的库,用于实现和使用它们,并由Sequelize等数据库包装器使用,以保持代码的有序性。