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读取memcache示例分享
Jan 02 NodeJs
NodeJS学习笔记之Http模块
Jan 13 NodeJs
NodeJS遍历文件生产文件列表功能示例
Jan 22 NodeJs
nodejs读写json文件的简单方法(必看)
Mar 09 NodeJs
Nodejs进阶:express+session实现简易登录身份认证
Apr 24 NodeJs
NodeJs中express框架的send()方法简介
Jun 20 NodeJs
使用Nodejs连接mongodb数据库的实现代码
Aug 21 NodeJs
nodejs使用http模块发送get与post请求的方法示例
Jan 08 NodeJs
关于Mac下安装nodejs、npm和cnpm的教程
Apr 11 NodeJs
NodeJS模块与ES6模块系统语法及注意点详解
Jan 04 NodeJs
Nodejs环境实现socket通信过程解析
Jul 03 NodeJs
nodejs使用Sequelize框架操作数据库的实现
Oct 21 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读取IMAP邮件
2006/10/09 PHP
基于数据库的在线人数,日访问量等统计
2006/10/09 PHP
PHP高级编程实例:编写守护进程
2014/09/02 PHP
PHP微信开发之文本自动回复
2016/06/23 PHP
如何利用预加载优化Laravel Model查询详解
2017/08/11 PHP
PHP实现动态添加XML中数据的方法
2018/03/30 PHP
PHP调用全国天气预报数据接口查询天气示例
2019/02/20 PHP
仿校内登陆框,精美,给那些很厉害但是没有设计天才的程序员
2008/11/24 Javascript
JavaScript高级程序设计 阅读笔记(十八) js跨平台的事件
2012/08/14 Javascript
JavaScript的作用域和块级作用域概念理解
2014/09/21 Javascript
JavaScript数据结构和算法之二叉树详解
2015/02/11 Javascript
使用HTML+CSS+JS制作简单的网页菜单界面
2015/07/27 Javascript
jQuery实现时尚漂亮的弹出式对话框实例
2015/08/07 Javascript
js实现当前输入框高亮显示的方法
2015/08/19 Javascript
JavaScript知识点总结(十一)之js中的Object类详解
2016/05/31 Javascript
jQuery选择器中的特殊符号处理方法
2017/09/08 jQuery
关于jQuery里prev()的简单操作代码
2017/10/27 jQuery
Vue.js通用应用框架-Nuxt.js的上手教程
2017/12/25 Javascript
vue树形结构获取键值的方法示例
2018/06/21 Javascript
详解如何使用node.js的开发框架express创建一个web应用
2018/12/20 Javascript
vue iview的菜单组件Mune 点击不高亮的解决方案
2019/11/01 Javascript
微信小程序停止其他视频播放当前视频的实例代码
2019/12/25 Javascript
vue页面加载时的进度条功能(实例代码)
2020/01/13 Javascript
原生js canvas实现鼠标跟随效果
2020/08/02 Javascript
多个Vue项目部署到服务器的步骤记录
2020/10/22 Javascript
python超简单解决约瑟夫环问题
2015/05/12 Python
python的staticmethod与classmethod实现实例代码
2018/02/11 Python
Python基于SMTP协议实现发送邮件功能详解
2018/08/14 Python
python 实现创建文件夹和创建日志文件的方法
2019/07/07 Python
利用css3如何设置没有上下边的列表间隔线
2017/07/03 HTML / CSS
综合素质自我评价怎么写
2014/09/14 职场文书
2014年教师思想工作总结
2014/12/03 职场文书
遗嘱范文
2015/08/07 职场文书
大队委员竞选演讲稿
2015/11/20 职场文书
公文写作指导之倡议书!
2019/07/03 职场文书
销区经理年终述职报告模板
2019/11/28 职场文书