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服务器(1):一个简单nodejs服务器例子
Dec 18 NodeJs
NodeJS实现阿里大鱼短信通知发送
Jan 17 NodeJs
Nodejs获取网络数据并生成Excel表格
Mar 31 NodeJs
NodeJs的优势和适合开发的程序
Aug 14 NodeJs
nodeJs内存泄漏问题详解
Sep 05 NodeJs
详谈Angular路由与Nodejs路由的区别
Mar 05 NodeJs
基于nodejs 的多页面爬虫实例代码
May 31 NodeJs
手把手教你把nodejs部署到linux上跑出hello world
Jun 19 NodeJs
nodejs中解决异步嵌套循环和循环嵌套异步的问题
Jul 12 NodeJs
Nodejs核心模块之net和http的使用详解
Apr 02 NodeJs
详解NodeJs项目 CentOs linux服务器线上部署
Sep 16 NodeJs
nodejs对mongodb数据库的增加修删该查实例代码
Jan 05 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的图形函数中显示汉字
2006/10/09 PHP
PHP include_path设置技巧分享
2011/07/03 PHP
php生成PDF格式文件并且加密
2015/06/22 PHP
javascript中运用闭包和自执行函数解决大量的全局变量问题
2010/12/30 Javascript
js 关于=+与+=日期函数使用说明(赋值运算符)
2011/11/15 Javascript
node.js中实现同步操作的3种实现方法
2014/12/05 Javascript
Javascript中的五种数据类型详解
2014/12/26 Javascript
Redis基本知识、安装、部署、配置笔记
2015/03/05 Javascript
jquery使用slideDown实现模块缓慢拉出效果的方法
2015/03/27 Javascript
javascript中 try catch用法
2015/08/16 Javascript
纯css实现窗户玻璃雨滴逼真效果
2015/08/23 Javascript
JS实现的左侧竖向滑动菜单效果代码
2015/10/19 Javascript
javascript针对cookie的基本操作实例详解
2015/11/30 Javascript
JQuery validate插件Remote用法大全
2016/05/15 Javascript
完美实现八种js焦点轮播图(上篇)
2016/07/18 Javascript
Javascript单例模式的介绍和实例
2016/10/08 Javascript
利用JavaScript的%做隔行换色的实例
2017/11/25 Javascript
js+html实现周岁年龄计算器
2019/06/25 Javascript
vue项目中常见问题及解决方案(推荐)
2019/10/21 Javascript
vue学习笔记之slot插槽基本用法实例分析
2020/02/01 Javascript
vue实现购物车加减
2020/05/30 Javascript
以911新闻为例演示Python实现数据可视化的教程
2015/04/23 Python
windows环境下tensorflow安装过程详解
2018/03/30 Python
对Python random模块打乱数组顺序的实例讲解
2018/11/08 Python
python实现贪吃蛇游戏
2020/03/21 Python
Python 编程速成(推荐)
2019/04/15 Python
Python OpenCV 调用摄像头并截图保存功能的实现代码
2019/07/02 Python
python中自带的三个装饰器的实现
2019/11/08 Python
Marlies Dekkers内衣法国官方网上商店:国际知名的荷兰内衣品牌
2019/03/18 全球购物
全球性的在线婚纱礼服工厂:27dress.com
2019/03/21 全球购物
教师实习自我鉴定
2013/12/18 职场文书
大学活动总结格式
2014/04/29 职场文书
司机工作自我鉴定
2014/09/19 职场文书
2014年移动公司工作总结
2014/12/08 职场文书
小英雄雨来观后感
2015/06/09 职场文书
利用Python实现Picgo图床工具
2021/11/23 Python