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实现点击同时更改两个iframe的网址
Jul 01 Javascript
jQuery Tools tab(幻灯片)
Jul 14 Javascript
jquery中change()用法实例分析
Feb 06 Javascript
js实现动态加载脚本的方法实例汇总
Nov 02 Javascript
javascript函数的四种调用模式
Jan 08 Javascript
浅谈angular4 ng-content 中隐藏的内容
Aug 18 Javascript
Bootstrap 3多级下拉菜单实例
Nov 23 Javascript
npm 更改默认全局路径以及国内镜像的方法
May 16 Javascript
webpack分离css单独打包的方法
Jun 12 Javascript
vue两个组件间值的传递或修改方式
Jul 04 Javascript
Vue CLI3 开启gzip压缩文件的方式
Sep 30 Javascript
关于vue状态过渡transition不起作用的原因解决
Apr 09 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
计算2000年01月01日起到指定日的天数
2006/10/09 PHP
php strstr查找字符串中是否包含某些字符的查找函数
2010/06/03 PHP
PHP性能优化 产生高度优化代码
2011/07/22 PHP
深入了解 register_globals (附register_globals=off 网站打不开的解决方法)
2012/06/27 PHP
仿Aspnetpager的一个PHP分页类代码 附源码下载
2012/10/08 PHP
PHP连接access数据库
2015/03/27 PHP
php中删除、清空session的方式总结
2015/10/09 PHP
微信JSSDK分享功能图文实例详解
2019/04/08 PHP
Javascript attachEvent传递参数的办法
2009/12/14 Javascript
Javascript中获取出错代码所在文件及行数的代码
2010/09/23 Javascript
IE 当eval遇上function的处理
2011/08/09 Javascript
JQuery select(下拉框)操作方法汇总
2015/04/15 Javascript
移动端JQ插件hammer使用详解
2015/07/03 Javascript
js实现图片无缝滚动
2015/12/23 Javascript
JavaScript中访问id对象 属性的方式访问属性(实例代码)
2016/10/28 Javascript
jQuery设置图片等比例缩小的方法
2017/04/29 jQuery
前端主流框架vue学习笔记第二篇
2017/07/26 Javascript
浅谈Vuejs Prop基本用法
2017/08/17 Javascript
JS面试题大坑之隐式类型转换实例代码
2018/10/14 Javascript
Easyui 关闭jquery-easui tab标签页前触发事件的解决方法
2019/04/28 jQuery
javascript实现抢购倒计时程序
2019/08/26 Javascript
es6 super关键字的理解与应用实例分析
2020/02/15 Javascript
Python入门篇之对象类型
2014/10/17 Python
浅谈python类属性的访问、设置和删除方法
2016/07/25 Python
Python多线程中阻塞(join)与锁(Lock)使用误区解析
2018/04/27 Python
详解Python odoo中嵌入html简单的分页功能
2019/05/29 Python
Django自定义用户登录认证示例代码
2019/06/30 Python
Python-Tkinter Text输入内容在界面显示的实例
2019/07/12 Python
Python 实现打印单词的菱形字符图案
2020/04/12 Python
西班牙灯具网上商店:Lampara.es
2018/06/05 全球购物
幼儿园保育员辞职信
2014/01/12 职场文书
小学毕业感言150字
2014/02/05 职场文书
行政部岗位职责范本
2014/03/13 职场文书
村级换届选举方案
2014/05/10 职场文书
本科毕业生自荐信
2014/06/02 职场文书
水电维修专业推荐信
2014/09/06 职场文书