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 相关文章推荐
用js实现上传图片前的预览(TX的面试题)
Aug 14 Javascript
JavaScript中的console.trace()函数介绍
Dec 29 Javascript
javascript中in运算符用法分析
Apr 28 Javascript
基于jquery实现省市联动效果
Nov 23 Javascript
javascript学习小结之prototype
Dec 03 Javascript
javascript实现拖放效果
Dec 16 Javascript
JS实现的表格操作类详解(添加,删除,排序,上移,下移)
Dec 22 Javascript
javascript 内置对象及常见API详细介绍
Nov 01 Javascript
判断滚动条滑到底部触发事件(实例讲解)
Nov 15 Javascript
对angularJs中自定义指令replace的属性详解
Oct 09 Javascript
TypeScript之调用栈的实现
Dec 31 Javascript
从Node.js事件触发器到Vue自定义事件的深入讲解
Jun 26 Javascript
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
PHP之APC缓存详细介绍 apc模块安装
2014/01/13 PHP
Yii2 assets清除缓存的方法
2016/05/16 PHP
php实现的生成迷宫与迷宫寻址算法完整实例
2017/11/06 PHP
[原创]js获取数组任意个不重复的随机数组元素
2010/03/15 Javascript
JQuery动态创建DOM、表单元素的实现代码
2011/08/09 Javascript
jQuery下的动画处理总结
2013/10/10 Javascript
13 款最热门的 jQuery 图像 360 度旋转插件推荐
2014/12/09 Javascript
js 数据存储和DOM编程
2017/02/09 Javascript
利用types增强vscode中js代码提示功能详解
2017/07/07 Javascript
JS获取指定月份的天数两种实现方法
2018/06/22 Javascript
bootstrap模态框弹出和隐藏,动态改变中间内容的实例
2018/08/10 Javascript
React和Vue中监听变量变化的方法
2018/11/14 Javascript
js实现中文实时时钟
2020/01/15 Javascript
使用vue打包进行云服务器上传的问题
2020/03/02 Javascript
js实现验证码功能
2020/07/24 Javascript
vue使用echarts画组织结构图
2021/02/06 Vue.js
python正则表达式去掉数字中的逗号(python正则匹配逗号)
2013/12/25 Python
Django1.3添加app提示模块不存在的解决方法
2014/08/26 Python
pygame学习笔记(4):声音控制
2015/04/15 Python
Python实现OpenCV的安装与使用示例
2018/03/30 Python
django允许外部访问的实例讲解
2018/05/14 Python
python实现一个点绕另一个点旋转后的坐标
2019/12/04 Python
keras用auc做metrics以及早停实例
2020/07/02 Python
Urban Outfitters美国官网:美国生活方式品牌
2016/08/26 全球购物
英国巧克力贸易公司:Chocolate Trading Company
2017/03/21 全球购物
Asics日本官网:鬼冢八喜郎创立的跑鞋运动品牌
2017/10/18 全球购物
Hoover胡佛官网:美国吸尘器和洗地机品牌
2019/01/09 全球购物
意大利消费电子产品购物网站:SLG Store
2019/12/26 全球购物
opencv实现图像几何变换
2021/03/24 Python
运动会广播稿400字
2014/01/25 职场文书
今冬明春火灾防控工作方案
2014/05/29 职场文书
个人工作作风整改措施思想汇报
2014/10/13 职场文书
篮球赛新闻稿
2015/07/17 职场文书
标枪加油稿
2015/07/22 职场文书
钓鱼岛事件感想
2015/08/11 职场文书
python之基数排序的实现
2021/07/26 Python