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


Posted in NodeJs onMarch 02, 2019

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 相关文章推荐
NodeJS Express框架中处理404页面一个方式
May 28 NodeJs
nodejs修复ipa处理过的png图片
Feb 17 NodeJs
NodeJS中的MongoDB快速入门详细教程
Nov 11 NodeJs
NodeJS设计模式总结【单例模式,适配器模式,装饰模式,观察者模式】
Sep 06 NodeJs
nodejs+mongodb+vue前后台配置ueditor的示例代码
Jan 02 NodeJs
使用npm安装最新版本nodejs
Jan 18 NodeJs
webstorm中配置nodejs环境及npm的实例
May 15 NodeJs
nodejs图片处理工具gm用法小结
Dec 12 NodeJs
NVM安装nodejs的方法实用步骤
Jan 16 NodeJs
nodejs开发一个最简单的web服务器实例讲解
Jan 02 NodeJs
使用nodejs实现JSON文件自动转Excel的工具(推荐)
Jun 24 NodeJs
Nodejs 数组的队列以及forEach的应用详解
Feb 25 NodeJs
Nodejs中怎么实现函数的串行执行
Mar 02 #NodeJs
Nodejs让异步变成同步的方法
Mar 02 #NodeJs
nodejs使用async模块同步执行的方法
Mar 02 #NodeJs
NodeJS实现同步的方法
Mar 02 #NodeJs
PHPStorm中如何对nodejs项目进行单元测试详解
Feb 28 #NodeJs
Nodejs对postgresql基本操作的封装方法
Feb 20 #NodeJs
深入理解nodejs搭建静态服务器(实现命令行)
Feb 05 #NodeJs
You might like
浅谈PHP中try{}catch{}的使用方法
2016/12/09 PHP
php中str_pad()函数用法分析
2017/03/28 PHP
PHP一致性hash分布式算法封装类定义与用法示例
2018/08/04 PHP
php + WebUploader实现图片批量上传功能
2019/05/06 PHP
JavaScript-世界上误解最深的语言分析
2007/08/12 Javascript
浅谈JavaScript函数参数的可修改性问题
2013/12/05 Javascript
JS批量修改PS中图层名称的方法
2014/01/26 Javascript
jquery 页眉单行信息滚动显示实现思路及代码
2014/06/26 Javascript
node.js中的fs.statSync方法使用说明
2014/12/16 Javascript
javascript获取四位数字或者字母的随机数
2015/01/09 Javascript
jQuery实现隔行变色的方法分析(对比原生JS)
2016/11/18 Javascript
使用elementUI实现将图片上传到本地的示例
2018/09/04 Javascript
webpack4.0 入门实践教程
2018/10/08 Javascript
vue接通后端api以及部署到服务器操作
2020/08/13 Javascript
js实现点击烟花特效
2020/10/14 Javascript
[01:03:13]VG vs Pain 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python3使用tkinter实现ui界面简单实例
2014/01/10 Python
Python爬虫基础之XPath语法与lxml库的用法详解
2018/09/13 Python
使用python采集脚本之家电子书资源并自动下载到本地的实例脚本
2018/10/23 Python
只需7行Python代码玩转微信自动聊天
2019/01/27 Python
Python下opencv图像阈值处理的使用笔记
2019/08/04 Python
Django项目中实现使用qq第三方登录功能
2019/08/13 Python
Python使用pdb调试代码的技巧
2020/05/03 Python
Django实现内容缓存实例方法
2020/06/30 Python
定义css设备类型-Media Queries图表简介及使用方法
2013/01/21 HTML / CSS
园林技术个人的自我评价
2014/01/08 职场文书
厨师个人自我鉴定范文
2014/04/19 职场文书
竞选卫生委员演讲稿
2014/04/28 职场文书
马丁路德金演讲稿
2014/05/19 职场文书
体育课外活动总结
2014/07/08 职场文书
组工干部对照检查材料
2014/08/25 职场文书
2015年乡镇卫生院妇幼保健工作总结
2015/05/19 职场文书
python pyhs2 的安装操作
2021/04/07 Python
Python3中PyQt5简单实现文件打开及保存
2021/06/10 Python
Python使用pyecharts控件绘制图表
2022/06/05 Python
Python实现聚类K-means算法详解
2022/07/15 Python