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上传功能
Jan 14 NodeJs
Nodejs--post的公式详解
Apr 29 NodeJs
nodejs实现OAuth2.0授权服务认证
Dec 27 NodeJs
详解NODEJS的http实现
Jan 04 NodeJs
手把手教你如何使用nodejs编写cli命令行
Nov 05 NodeJs
NodeJs 文件系统操作模块fs使用方法详解
Nov 26 NodeJs
nodejs 使用nodejs-websocket模块实现点对点实时通讯
Nov 28 NodeJs
Nodejs处理异常操作示例
Dec 25 NodeJs
nodejs使用node-xlsx生成excel的方法示例
Aug 22 NodeJs
5分钟教你用nodeJS手写一个mock数据服务器的方法
Sep 10 NodeJs
Nodejs监控事件循环异常示例详解
Sep 22 NodeJs
使用 Koa + TS + ESLlint 搭建node服务器的过程详解
May 30 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
用Zend Encode编写开发PHP程序
2006/10/09 PHP
Zend Framework页面缓存实例
2014/06/25 PHP
php打造智能化的柱状图程序,用于报表等
2015/06/19 PHP
php简单日历函数
2015/10/28 PHP
php对文件夹进行相关操作(遍历、计算大小)
2015/11/04 PHP
PHP+MySql+jQuery实现的"顶"和"踩"投票功能
2016/05/21 PHP
php解决DOM乱码的方法示例代码
2016/11/20 PHP
PHP中phar包的使用教程
2017/06/14 PHP
PHP设计模式之原型设计模式原理与用法分析
2018/04/25 PHP
PHP自定义函数实现assign()数组分配到模板及extract()变量分配到模板功能示例
2018/05/23 PHP
在Javascript里访问SharePoint列表数据的实现方法
2011/05/22 Javascript
谈谈jQuery Ajax用法详解
2015/11/27 Javascript
JavaScript深度复制(deep clone)的实现方法
2016/02/19 Javascript
JavaScript的模块化开发框架Sea.js上手指南
2016/05/12 Javascript
Javascript基础_简单比较undefined和null 值
2016/06/14 Javascript
JavaScript实现的CRC32函数示例
2016/11/23 Javascript
使用D3.js创建物流地图的示例代码
2018/01/27 Javascript
jquery 动态遍历select 赋值的实例
2018/09/12 jQuery
微信JS-SDK updateAppMessageShareData安卓不能自定义分享详解
2019/03/29 Javascript
微信小程序错误this.setData报错及解决过程
2019/09/18 Javascript
用JS实现一个简单的打砖块游戏
2019/12/11 Javascript
nuxt.js添加环境变量,区分项目打包环境操作
2020/11/06 Javascript
在Django框架中设置语言偏好的教程
2015/07/27 Python
Python基础篇之初识Python必看攻略
2016/06/23 Python
Scrapy爬虫实例讲解_校花网
2017/10/23 Python
在pycharm中python切换解释器失败的解决方法
2018/10/29 Python
使用keras2.0 将Merge层改为函数式
2020/05/23 Python
pandas apply多线程实现代码
2020/08/17 Python
Myprotein加拿大官网:欧洲第一的运动营养品牌
2018/01/06 全球购物
团员个人的自我评价
2013/12/02 职场文书
学生党员思想汇报范文
2014/01/09 职场文书
奥巴马竞选演讲稿
2014/05/15 职场文书
基层干部个人对照检查及整改措施
2014/10/28 职场文书
义卖募捐活动总结
2015/05/09 职场文书
2016年情人节问候语
2015/11/11 职场文书
nginx实现多geoserver服务的负载均衡
2022/05/15 Servers