nodejs读MySQL锁_nodejs同步调用获取mysql数据时遇到的大坑

mysql调用获取数据,只能是异步方式返回结果,不能同步获取结果,因此,须在回调函数中编写处理事件。期间看了下Aysnc.js,是用于多个要返回回调函数的事件,将这些事件有序的组织起来,最后只返回一个回调函数,并没有改变异步的本质,而是将多个异步整合为一个异步,从而满足写程序的需求。

错误示范

获取数据库中的数据函数

var _getUser = function(name) {

var sql = "SELECT * FROM " + TABLE + " WHERE user_loginname='" + name + "'";

connection.query(sql, function(err, results) {

if(!err) {

var res = hasUser(results);

return res;

}else {

return error();

}

});

function hasUser(results) {

if(results.length == 0) {

return {err: 1, msg: "此用户名不存在"};

}

else {

return results[0];

}

}

function error() {

return {err: 1, msg: "数据库出错"};

}

}

var getUser = function(name){

return _getUser(name);

}

获取结果处理事件

//获取post上来的 data数据中 uname的值

var uname = req.body.uname;

var User = getUser(uname);

if(User.err){

res.status(404)

} else {

var upwd = md5 (req.body.upwd);

//查询到匹配用户名的信息,但相应的password属性不匹配

if(upwd != User.user_passwd){

req.session.error = "密码错误";

res.send(404);

// res.redirect("/login");

}else{

//信息匹配成功,则将此对象(匹配到的user) 赋给session.user 并返回成功

req.session.user = {name: uname, password: upwd};

res.status(200).send("success")

// res.send(200);

// res.redirect("/home");

}

}

// md5方式加密

function md5 (text) {

return crypto.createHash('md5').update(text).digest('hex');

};

正确示范

获取数据库中的数据函数

var _getUser = function(name, callback) {

var sql = "SELECT * FROM " + TABLE + " WHERE user_loginname='" + name + "'";

connection.query(sql, function(err, results) {

if(!err) {

var res = hasUser(results)

callback(res);

}else {

callback(error());

}

});

function hasUser(results) {

if(results.length == 0) {

return {err: 1, msg: "此用户名不存在"};

}

else {

return results[0];

}

}

function error() {

return {err: 1, msg: "数据库出错"};

}

}

var getUser = function(name, callback){

return _getUser(name, callback);

}

获取结果处理事件

//获取post上来的 data数据中 uname的值

var uname = req.body.uname;

getUser(uname, function(data){

var User = data;

if(User.err){

res.status(404)

} else {

var upwd = md5 (req.body.upwd);

//查询到匹配用户名的信息,但相应的password属性不匹配

if(upwd != User.user_passwd){

req.session.error = "密码错误";

res.send(404);

// res.redirect("/login");

}else{

//信息匹配成功,则将此对象(匹配到的user) 赋给session.user 并返回成功

req.session.user = {name: uname, password: upwd};

res.status(200).send("success")

// res.send(200);

// res.redirect("/home");

}

}

});

// md5方式加密

function md5 (text) {

return crypto.createHash('md5').update(text).digest('hex');

};

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对聚米学院的支持。如果你想了解更多相关内容请查看下面相关链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值