nodejs查询mysql的坑_nodejs同步调用获取mysql数据时遇到的大坑

本文讨论了在Node.js中尝试同步获取MySQL数据时遇到的问题,强调了数据库查询必须通过异步方式进行。文章通过错误示例展示了直接返回异步查询结果导致的错误,并提供了使用回调函数正确处理异步查询的示例。总结了理解和正确处理Node.js异步编程的重要性。
摘要由CSDN通过智能技术生成

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');

};

总结

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

本文标题: nodejs同步调用获取mysql数据时遇到的大坑

本文地址: http://www.cppcns.com/wangluo/javascript/253612.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值