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

 更新时间:2019年03月02日 11:44:52   作者:NiceNemo  
今天小编就为大家分享一篇关于nodejs同步调用获取mysql数据时遇到的大坑,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

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内置模块

    这篇文章主要介绍了nodejs内置模块,对nodejs感兴趣的同学,可以参考下
    2021-05-05
  • node使用Git Bash作为命令行终端示例

    node使用Git Bash作为命令行终端示例

    这篇文章主要为大家介绍了node使用Git Bash作为命令行终端示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • 使用命令行升级Node.js的版本的操作指南

    使用命令行升级Node.js的版本的操作指南

    这篇文章主要给大家介绍了关于如何使用命令行升级Node.js的版本的操作指南,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧
    2023-11-11
  • Google官方支持的NodeJS访问API,提供后台登录授权

    Google官方支持的NodeJS访问API,提供后台登录授权

    Google官方支持的NodeJS集成客户端,用以访问Google APIs, 支持OAuth 2.0授信及登录认证。登录以后即可在后台访问例如 Google Drive(云存储), Google Analytics, Gmail等服务。
    2014-07-07
  • Node.js + express实现上传大文件的方法分析【图片、文本文件】

    Node.js + express实现上传大文件的方法分析【图片、文本文件】

    这篇文章主要介绍了Node.js + express实现上传大文件的方法,结合实例形式分析了Node.js + express针对图片、文本文件上传操作实现方法及相关操作注意事项,需要的朋友可以参考下
    2019-03-03
  • node基于async/await对mysql进行封装

    node基于async/await对mysql进行封装

    这篇文章主要介绍了node基于async/await对mysql进行封装,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,,需要的朋友可以参考下
    2019-06-06
  • 在Node.js应用中使用Redis的方法简介

    在Node.js应用中使用Redis的方法简介

    这篇文章主要介绍了在Node.js应用中使用Redis的方法,最简单的数据读写操作相关,需要的朋友可以参考下
    2015-06-06
  • nodejs简单实现操作arduino

    nodejs简单实现操作arduino

    本文给大家分享的是使用nodejs来驱动arduino,主要是基于cylonjs 和 gort,有需要的小伙伴可以参考下
    2016-09-09
  • node.js学习之事件模块Events的使用示例

    node.js学习之事件模块Events的使用示例

    Nodejs中不存在浏览器中冒泡,捕获这些行为,Nodejs中实现了events这个模块,Nodejs中大多数模块都集成了这个模块,所以events是Nodejs中最重要的一个模块。这篇文章主要给大家介绍了关于node.js学习教程之事件模块Events的相关资料,需要的朋友可以参考下。
    2017-09-09
  • nodejs npm install全局安装和本地安装的区别

    nodejs npm install全局安装和本地安装的区别

    这篇文章主要介绍了nodejs npm install 全局安装和非全局安装的区别,即带参数-g和不带参数-g安装的区别,需要的朋友可以参考下
    2014-06-06

最新评论