node.js如何操作MySQL数据库


Posted in Javascript onOctober 29, 2020

MySQL数据库作为最流行的开源数据库。基本上是每个web开发者必须要掌握的数据库程序之一了。

基本使用

node.js上,最受欢迎的mysql包就是mysql模块。

npm install mysql

然后在js脚本里面直接引用进来

var mysql   = require('mysql');

配置mysql的数据库连接。

var connection = mysql.createConnection({
 host   : 'ip',
 user   : '用户名',
 password : '密码',
 database : 'dbname'
});
connection.connect();

这样就拿到了一个连接。

然后就可以愉快的进行各种curd操作了。

node.js对数据库的curd都在query这个方法里面。这点和ado.net有很大的区别。

你的所有的操作,都从query的回调函数里面获得结果

connection.query('SELECT 1 + 1 AS solution', function (error, results, fields) {
 if (error) throw error;
 console.log('The solution is: ', results[0].solution);
});

连接池操作

在单机软件中,我们之间使用简单获得一个连接,然后就行了。

但是在面向互联网的web服务里面,频繁的创建和关闭连接,是很消耗服务器性能的。

于是我们的前辈们发明了各种池子。比如多线程操作中的线程池,游戏开发中的对象池,当然还包括数据库操作的连接池。

创建连接池:

var mysql = require('mysql');
var pool = mysql.createPool({
 connectionLimit : 连接池数量,
 host      : 'ip地址',
 user      : '账号',
 password    : '密码',
 database    : '数据库名称'
});

然后就是和上文一样的curd操作

//从连接池中获取一个连接
pool.getConnection(function(err, connection) {
  if (err) throw err; // not connected!
 
  // 使用这个连接curd
  connection.query('SELECT something FROM sometable', function (error, results, fields) {
    // 使用完之后,记得把这个连接放到连接池里面去
    connection.release();
 
    // Handle error after the release.
    if (error) throw error;
 
  });
});

如果你的程序要退出,请把调用连接池的end()方法。不然程序会卡在后台,一直退出失败。

封装成Promise

在ES6中,可以直接用和C#的await一样的语法去调用js的异步函数。

但是要求这个函数必须是async声明和返回值是Promise对象。

query = function (sql, arr, callback) {
  console.log('获取一个连接');
  return new Promise(function (resolve, reject) {
    pool.getConnection(function (err, connection) {
      if (err) {
        reject(err);// not connected!
      } else {
        console.log('开始查询');
        connection.query(sql, arr, function (error, results, fields) {
          connection.release();
          console.log('连接已经释放,返回结果');

          if (error) reject(error);
          // callback && callback(results, fields)
          resolve({
            rows: results,
            fields: fields
          })
        });
      }


    });
  })


}

简单的用法到这里就结束了。当然还有更高级的用法,比如MySQL的Cluster操作等。有兴趣的话,可以去研究,因为我目前用不到这种功能,所有就不往后去深究了。

以上就是node.js如何操作MySQL数据库的详细内容,更多关于node.js 操作数据库的资料请关注三水点靠木其它相关文章!

Javascript 相关文章推荐
ExtJS 2.2.1的grid控件在ie6中的显示问题
May 04 Javascript
Iframe 自适应高度并实时监控高度变化的js代码
Oct 30 Javascript
JS基础之undefined与null的区别分析
Aug 08 Javascript
控制文字内容的显示与隐藏示例
Jun 11 Javascript
javascript判断变量是否有值的方法
Apr 20 Javascript
jQuery调用Webservice传递json数组的方法
Aug 06 Javascript
纯javaScript、jQuery实现个性化图片轮播【推荐】
Jan 08 Javascript
JS判断用户用的哪个浏览器实例详解
Oct 09 Javascript
vue项目前端知识点整理【收藏】
May 13 Javascript
了解Javascript中函数作为对象的魅力
Jun 19 Javascript
JS实现多选框的操作
Jun 24 Javascript
vue 递归组件的简单使用示例
Jan 14 Vue.js
TypeScript魔法堂之枚举的超实用手册
Oct 29 #Javascript
解决antd的Form组件setFieldsValue的警告问题
Oct 29 #Javascript
vue 函数调用加括号与不加括号的区别
Oct 29 #Javascript
JavaScript实现随机点名小程序
Oct 29 #Javascript
在antd中setFieldsValue和defaultVal的用法
Oct 29 #Javascript
微信小程序淘宝首页双排图片布局排版代码(推荐)
Oct 29 #Javascript
解决antd datepicker 获取时间默认少8个小时的问题
Oct 29 #Javascript
You might like
Fatal error: session_start(): Failed to initialize storage module: files问题解决方法
2014/05/04 PHP
Valerio 发布了 Mootools
2006/09/23 Javascript
jquery1.4.2 for Visual studio 2010 模板文件
2010/07/14 Javascript
浅谈JavaScript字符集
2014/05/22 Javascript
Jquery $.getJSON 在IE下的缓存问题解决方法
2014/10/10 Javascript
javascript实现瀑布流自适应遇到的问题及解决方案
2015/01/28 Javascript
JavaScript判断用户是否对表单进行了修改的方法
2015/03/18 Javascript
JavaScript知识点总结之如何提高性能
2016/01/15 Javascript
Jquery中巧用Ajax的beforeSend方法
2016/01/20 Javascript
AngularJS实现单独作用域内的数据操作
2016/09/05 Javascript
js放大镜放大购物图片效果
2017/01/18 Javascript
Javascript中 toFixed四舍六入方法
2017/08/21 Javascript
简单谈谈js的数据类型
2017/09/25 Javascript
jQuery层叠选择器用法实例分析
2019/06/28 jQuery
no-vnc和node.js实现web远程桌面的完整步骤
2019/08/11 Javascript
小程序跳转H5页面的方法步骤
2020/03/06 Javascript
Python不规范的日期字符串处理类
2014/06/10 Python
Python 实现 贪吃蛇大作战 代码分享
2016/09/07 Python
Python 搭建Web站点之Web服务器网关接口
2016/11/06 Python
Python实现字典去除重复的方法示例
2017/07/31 Python
pyqt5 禁止窗口最大化和禁止窗口拉伸的方法
2019/06/18 Python
解决json中ensure_ascii=False的问题
2020/04/03 Python
python unichr函数知识点总结
2020/12/16 Python
canvas实现有递增动画的环形进度条的实现方法
2019/07/10 HTML / CSS
斯德哥尔摩通票:Stockholm Pass
2018/01/09 全球购物
印尼在线购买隐形眼镜网站:Lensza.co.id
2019/04/27 全球购物
酒店服务与管理毕业生求职信
2013/11/02 职场文书
自主招生自荐信范文
2013/12/04 职场文书
教育局长自荐信范文
2013/12/22 职场文书
工作会议方案
2014/05/21 职场文书
物业保安辞职信
2015/05/12 职场文书
教师工作证明范本
2015/06/12 职场文书
浅谈Python数学建模之固定费用问题
2021/06/23 Python
Windows 11要来了?微软文档揭示Win11太阳谷 / Win10有两个不同版本
2021/11/21 数码科技
90后经典动画片排行:《数码宝贝》第二,《小鲤鱼历险记》在榜
2022/03/18 日漫
Python安装及建立虚拟环境的完整步骤
2022/06/25 Servers