mysql nodejs 成功_关于nodejs访问mysql的思考

nodejs要访问mysql数据库,首先必须要安装包mysql,命令:npm install mysql。安装成功后的访问数据库代码如下:

var mysql = require('mysql');var options ={

host:'172.23.88.107',

port:3306,

database:'test',

user:'root',

password:'zdsoft'};var pool =mysql.createPool(options);

pool.getConnection(function(err, conn) {if(err) {

console.log(err);//打印错误消息

} else{

conn.query("select * from student", null, function(err, results, fields) {//释放连接

conn.release();if(err) {

console.log(err);

}else{

console.log(results);//成功,打印结果集

}

})

}

});

ok,上面的代码经过测试是没有任何问题的,但是现在就有个问题了,我们每次访问数据库都写这么大一篇感觉太累了,于是我们想把公共的部分提取出来创建一个类,文件名为:sqlHelper.js。由于数据库访问是异步访问的,因此我们不能直接通过返回return的方式,因此就必须要使用回调函数,sqlHelper.js的代码如下:

var mysql = require('mysql');var options ={

host:'172.23.88.107',

port:3306,

database:'test',

user:'root',

password:'zdsoft'};var pool =mysql.createPool(options);

exports.query= function(sql, vals, fn) {

pool.getConnection(function(err, conn) {if(err) {

fn(newError(err));

}else{

conn.query(sql,null, function(err, results, fields) {//释放连接

conn.release();if(err) {

fn(newError(err));

}else{

fn(null, results, fields);

}

})

}

});

}

这样,我们在调用的时候直接传入fn这个回调函数即可,调用方法如下:

var mysql = require('./lib/sqlHelper.js');//sqlHelper.js文件在lib文件夹下面

var result = mysql.query("select * from student", null, function(err, results, fields) {if(results) {for (let index = 0; index < results.length; index++) {

console.log(results[index].name);

}

}else{

console.log("err,msg:" +err);

}

});

自此,我们也算是大功告成了。

================================================分割线===========================================================

然而,我们还有另外一种实现方式,就是通过Promise这个对象,通过Promise对象我们可以像编写同步程序一样去编写异步代码,从而不用去无限次的嵌套回调函数,sqlHelper.js修改如下:

var mysql = require('mysql');var options ={

host:'172.23.88.107',

port:3306,

database:'test',

user:'root',

password:'zdsoft'};var pool =mysql.createPool(options);

exports.query= function(sql) {return new Promise(function(resolve, reject) {

pool.getConnection(function(err, conn) {if(err) {

reject(err);//让状态变为已失效,并把错误消息传递回去

} else{

conn.query(sql,null, function(err, results, fields) {//释放连接

conn.release();if(err) {

reject(err);

}else{

resolve(results, fields);//让状态变为已成功,并把成功数据传递回去

}

})

}

});

});

}

调用方法修改如下:

var mysql = require('./lib/sqlHelper.js');//sqlHelper.js文件在lib文件夹下面

var promise = mysql.query("select * from student");

promise.then(function(results, fields) {for (let index = 0; index < results.length; index++) {

console.log(results[index].name);

}

},function(err) {

console.log(err);

});

可以看到,我们已经没有使用回调函数了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值