首页 > 编程 > JavaScript > 正文

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

2019-11-19 12:02:56
字体:
来源:转载
供稿:网友

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

总结

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表