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极简入门教程(二):定时器
Oct 25 NodeJs
初始Nodejs
Nov 08 NodeJs
nodejs搭建本地服务器并访问文件的方法
Mar 03 NodeJs
详解nodejs的express如何自动生成项目框架
Jul 12 NodeJs
nodejs动态创建二维码的方法
Aug 12 NodeJs
nodejs创建简易web服务器与文件读写的实例
Sep 07 NodeJs
使用vs code开发Nodejs程序的使用方法
Sep 21 NodeJs
Mac 安装 nodejs方法(图文详细步骤)
Oct 30 NodeJs
利用nodeJs anywhere搭建本地服务器环境的方法
May 12 NodeJs
nodejs更改项目端口号的方法
May 13 NodeJs
nodejs基础之buffer缓冲区用法分析
Dec 26 NodeJs
Nodejs + sequelize 实现增删改查操作
Nov 07 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中MVC模式的模板引擎开发经验分享
2011/03/23 PHP
WordPress中编写自定义存储字段的相关PHP函数解析
2015/12/25 PHP
PHP底层运行机制与工作原理详解
2020/07/31 PHP
tagName的使用,留一笔
2006/06/26 Javascript
js 数组的for循环到底应该怎么写?
2010/05/31 Javascript
基于jquery的仿百度的鼠标移入图片抖动效果
2010/09/17 Javascript
js内置对象 学习笔记
2011/08/01 Javascript
全面解析JavaScript的Backbone.js框架中的Router路由
2016/05/05 Javascript
JS判断微信扫码的方法
2017/08/07 Javascript
javaScript canvas实现(画笔大小 颜色 橡皮的实例)
2017/11/28 Javascript
vue实现微信分享朋友圈,发送朋友的示例讲解
2018/02/10 Javascript
深入探索VueJS Scoped CSS 实现原理
2019/09/23 Javascript
Vue组件基础用法详解
2020/02/05 Javascript
解决vuex改变了state的值,但是页面没有更新的问题
2020/11/12 Javascript
python的id()函数介绍
2013/02/10 Python
python获取beautifulphoto随机某图片代码实例
2013/12/18 Python
Python中用memcached来减少数据库查询次数的教程
2015/04/07 Python
将Python中的数据存储到系统本地的简单方法
2015/04/11 Python
在Python中操作字典之update()方法的使用
2015/05/22 Python
Python安装使用命令行交互模块pexpect的基础教程
2016/05/12 Python
Python使用迭代器打印螺旋矩阵的思路及代码示例
2016/07/02 Python
Python文本统计功能之西游记用字统计操作示例
2018/05/07 Python
pip安装tensorflow的坑的解决
2020/04/19 Python
如何实现在jupyter notebook中播放视频(不停地展示图片)
2020/04/23 Python
简述python Scrapy框架
2020/08/17 Python
介绍一下write命令
2012/09/24 面试题
业务总经理岗位职责
2014/02/03 职场文书
《在家里》教后反思
2014/03/01 职场文书
运动会入场口号
2014/06/07 职场文书
2014年银行员工年终自我评价
2014/09/19 职场文书
2014领导班子“四风问题”对照检查材料思想汇报(执法局)
2014/09/21 职场文书
文明单位申报材料
2014/12/23 职场文书
农民工工资保障承诺书
2015/05/04 职场文书
工作经历证明范本
2015/06/15 职场文书
导游词之黄果树瀑布
2019/09/20 职场文书
Python3.8官网文档之类的基础语法阅读
2021/09/04 Python