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 判断浏览器类型 去全角、半角空格 自动关闭当前窗口
Apr 10 Javascript
javascript之通用简单的table选项卡实现(二)
May 09 Javascript
JavaScript代码实现左右上下自动晃动自动移动
Apr 08 Javascript
细数JavaScript 一个等号,两个等号,三个等号的区别
Oct 09 Javascript
jquery实现input框获取焦点的简单实例
Jan 26 Javascript
纯js三维数组实现三级联动效果
Feb 07 Javascript
WdatePicker.js时间日期插件的使用方法
Jul 26 Javascript
小程序获取当前位置加搜索附近热门小区及商区的方法
Apr 08 Javascript
echarts统计x轴区间的数值实例代码详解
Jul 07 Javascript
详解Vue-cli3.X使用px2rem遇到的问题
Aug 09 Javascript
Vue路由的模块自动化与统一加载实现
Jun 05 Javascript
通过实例解析chrome如何在mac环境中安装vue-devtools插件
Jul 10 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
屏蔽机器人从你的网站搜取email地址的php代码
2012/11/14 PHP
PHP获取数组长度或某个值出现次数的方法
2015/02/11 PHP
thinkphp框架类库扩展操作示例
2019/11/26 PHP
pjblog修改技巧汇总
2007/03/12 Javascript
jquery 全局AJAX事件使用代码
2010/11/05 Javascript
JQuery 绑定select标签的onchange事件,弹出选择的值,并实现跳转、传参
2011/01/06 Javascript
关于js获取radio和select的属性并控制的代码
2011/05/12 Javascript
JS分割字符串并放入数组的函数
2011/07/04 Javascript
jQuery 回调函数(callback)的使用和基础
2015/02/26 Javascript
js实现的简单radio背景颜色选择器代码
2015/08/18 Javascript
详解Bootstrap插件
2016/04/25 Javascript
JS实现二叉查找树的建立以及一些遍历方法实现
2017/04/17 Javascript
Nodejs回调加超时限制两种实现方法
2017/06/09 NodeJs
jQuery中过滤器的基本用法示例
2017/10/11 jQuery
vue2.0 axios跨域并渲染的问题解决方法
2018/03/08 Javascript
JS回调函数 callback的理解与使用案例分析
2019/09/09 Javascript
vue.js自定义组件实现v-model双向数据绑定的示例代码
2020/01/08 Javascript
解决微信小程序scroll-view组件无横向滚动的问题
2020/02/04 Javascript
在vue中使用echarts(折线图的demo,markline用法)
2020/07/20 Javascript
js实现圆形菜单选择器
2020/12/03 Javascript
[04:27]2014DOTA2国际邀请赛 NAVI战队官方纪录片
2014/07/21 DOTA
[01:38]DOTA2第二届亚洲邀请赛中国区预选赛出线战队晋级之路
2017/01/17 DOTA
深入解析Python编程中JSON模块的使用
2015/10/15 Python
python3 与python2 异常处理的区别与联系
2016/06/19 Python
python通过txt文件批量安装依赖包的实现步骤
2019/08/13 Python
python爬虫 批量下载zabbix文档代码实例
2019/08/21 Python
python求numpy中array按列非零元素的平均值案例
2020/06/08 Python
css3实现超炫风车特效
2014/11/12 HTML / CSS
Marlies Dekkers内衣美国官方网上商店:高端内衣品牌
2018/11/12 全球购物
施惠特软件测试面试题以及笔试题
2015/05/13 面试题
中科软笔试题和面试题
2014/10/07 面试题
乐观自信演讲稿范文
2014/05/21 职场文书
党员反对四风问题思想汇报
2014/09/12 职场文书
2014旅游局党组书记党建工作汇报材料
2014/11/02 职场文书
搞笑欢迎词大全
2015/09/30 职场文书
使用springboot暴露oracle数据接口的问题
2021/05/07 Oracle