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 相关文章推荐
jQuery事件绑定.on()简要概述及应用
Feb 07 Javascript
利用javascript数组长度循环数组内所有元素
Dec 27 Javascript
使用CSS3的scale实现网页整体缩放
Mar 18 Javascript
探究Vue.js 2.0新增的虚拟DOM
Oct 20 Javascript
JS变量中有var定义和无var定义的区别以及es6中let命令和const命令
Feb 19 Javascript
基于jQuery实现一个marquee无缝滚动的插件
Mar 09 Javascript
从零开始学习Node.js系列教程之基于connect和express框架的多页面实现数学运算示例
Apr 13 Javascript
用Axios Element实现全局的请求loading的方法
Mar 15 Javascript
Vue 获取数组键名的方法
Jun 21 Javascript
JS实现获取毫秒值及转换成年月日时分秒的方法
Aug 15 Javascript
深入浅析Vue中mixin和extend的区别和使用场景
Aug 01 Javascript
node.js文件操作系统实例详解
Nov 05 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脚本的10个技巧(7)
2006/10/09 PHP
一贴学会PHP 新手入门教程
2009/08/03 PHP
php自动给文章加关键词链接的函数代码
2012/11/29 PHP
PHP+iFrame实现页面无需刷新的异步文件上传
2014/09/16 PHP
javascript延时重复执行函数 lLoopRun.js
2007/06/29 Javascript
js实现点击左右按钮轮播图片效果实例
2015/01/29 Javascript
推荐阅读的js快速判断IE浏览器(兼容IE10与IE11)
2015/12/13 Javascript
JS对大量数据进行多重过滤的方法
2016/11/04 Javascript
javascript中的try catch异常捕获机制用法分析
2016/12/14 Javascript
js实现短信发送倒计时功能(正则验证)
2017/02/10 Javascript
vue-cli中打包图片路径错误的解决方法
2017/10/26 Javascript
nginx配置React静态页面的方法教程
2017/11/03 Javascript
Vue实现底部侧边工具栏的实例代码
2018/09/03 Javascript
详解vuex之store拆分即多模块状态管理(modules)篇
2018/11/13 Javascript
Easyui 关闭jquery-easui tab标签页前触发事件的解决方法
2019/04/28 jQuery
vue 集成 vis-network 实现网络拓扑图的方法
2019/08/07 Javascript
vue+element tabs选项卡分页效果
2020/06/29 Javascript
Json实现传值到后台代码实例
2020/06/30 Javascript
python中实现定制类的特殊方法总结
2014/09/28 Python
python实现图书馆研习室自动预约功能
2018/04/27 Python
python2.7和NLTK安装详细教程
2018/09/19 Python
Python 获取div标签中的文字实例
2018/12/20 Python
python实现猜数游戏(保存游戏记录)
2020/06/22 Python
HTML5不支持标签和新增标签详解
2016/06/27 HTML / CSS
移动HTML5前端框架—MUI的使用
2017/12/18 HTML / CSS
英国网上超市:Ocado
2020/03/05 全球购物
荷兰美妆护肤品海淘网站:Beautinow(中文)
2020/11/22 全球购物
生物科学专业个人求职信范文
2013/12/05 职场文书
中班开学寄语
2014/04/04 职场文书
食品安全演讲稿
2014/09/01 职场文书
个人融资协议书
2014/10/02 职场文书
西安兵马俑导游词
2015/02/02 职场文书
2015学习委员工作总结范文
2015/04/03 职场文书
建筑技术负责人岗位职责
2015/04/13 职场文书
网络新闻该怎么写?这些写作技巧你都知道吗?
2019/08/26 职场文书
pnpm对npm及yarn降维打击详解
2022/08/05 Javascript