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 相关文章推荐
兼容ie和firefox js关闭代码
Dec 11 Javascript
jQuery Mobile的loading对话框显示/隐藏方法分享
Nov 26 Javascript
javascript字符串对象常用api函数小结(连接,替换,分割,转换等)
Sep 20 Javascript
jquery实现图片切换代码
Oct 13 Javascript
微信小程序 欢迎页面的制作(源码下载)
Jan 09 Javascript
JavaScript设计模式之代理模式详解
Jun 09 Javascript
ES6 javascript中class类的get与set用法实例分析
Oct 30 Javascript
webpack配置打包后图片路径出错的解决
Apr 26 Javascript
Vue侦测相关api的实现方法
May 22 Javascript
浅谈TypeScript 用 Webpack/ts-node 运行的配置记录
Oct 11 Javascript
Vue中axios拦截器如何单独配置token
Dec 27 Javascript
详解vite2.0配置学习(typescript版本)
Feb 25 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开发工具ZendStudio下Xdebug工具使用说明详解
2013/11/11 PHP
PHP单例模式详解及实例代码
2016/12/21 PHP
PHP7创建COOKIE和销毁COOKIE的实例方法
2020/02/03 PHP
关于取不到由location.href提交而来的上级页面地址的解决办法
2009/07/30 Javascript
面向对象的编程思想在javascript中的运用上部
2009/11/20 Javascript
多浏览器兼容的获取元素和鼠标的位置的js代码
2009/12/15 Javascript
javascript 判断字符串是否包含某字符串及indexOf使用示例
2013/10/18 Javascript
javascript对JSON数据排序的3个例子
2014/04/12 Javascript
js统计录入文本框中字符的个数并加以限制不超过多少
2014/05/23 Javascript
JavaScript中Function详解
2015/02/27 Javascript
javascript验证身份证号
2015/03/03 Javascript
Grunt入门教程(自动任务运行器)
2015/08/06 Javascript
跟我学习javascript的浮点数精度
2015/11/16 Javascript
JavaScript的==运算详解
2016/07/20 Javascript
IE8利用自带的setCapture和releaseCapture解决iframe的拖拽事件方法
2016/10/25 Javascript
JavaScript设计模式之门面模式原理与实现方法分析
2020/03/09 Javascript
[59:30]完美世界DOTA2联赛PWL S3 access vs LBZS 第二场 12.20
2020/12/23 DOTA
手把手教你用python抢票回家过年(代码简单)
2018/01/21 Python
Python 通过调用接口获取公交信息的实例
2018/12/17 Python
python列表每个元素同增同减和列表元素去空格的实例
2019/07/20 Python
python错误调试及单元文档测试过程解析
2019/12/19 Python
python plt可视化——打印特殊符号和制作图例代码
2020/04/17 Python
Python 利用flask搭建一个共享服务器的步骤
2020/12/05 Python
CSS3实现多样的边框效果
2018/05/04 HTML / CSS
html svg生成环形进度条的实现方法
2019/09/23 HTML / CSS
Melijoe时尚童装德国官网:Melijoe德国
2016/09/03 全球购物
打架检讨书100字
2014/01/08 职场文书
高中考试作弊检讨书
2014/01/14 职场文书
新学期决心书
2014/03/11 职场文书
探亲假请假条
2014/04/11 职场文书
服务员岗位职责
2015/02/03 职场文书
学校捐款活动总结
2015/05/09 职场文书
行政答辩状范文
2015/05/21 职场文书
合作意向书范本
2019/04/17 职场文书
导游词之丽江普济寺
2019/10/22 职场文书
2021年国漫热度排行前十,完美世界上榜,第四是美国动画作品
2022/03/18 国漫