国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > JS > 正文

nodejs同步調用獲取mysql數據時遇到的大坑

2024-05-06 16:48:42
字體:
來源:轉載
供稿:網友

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

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 伊金霍洛旗| 南投县| 四川省| 奉贤区| 南通市| 灵台县| 利津县| 体育| 贵定县| 来宾市| 德庆县| 通河县| 屏东市| 武清区| 南部县| 秀山| 南丰县| 文安县| 蓝山县| 临安市| 梁山县| 桂林市| 和田市| 宝山区| 西和县| 措美县| 招远市| 梨树县| 成武县| 舟曲县| 晋城| 湘西| 茂名市| 鄱阳县| 芦溪县| 运城市| 邢台县| 肥西县| 留坝县| 东阿县| 丹棱县|