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控制CSS样式属性语法对照表
Dec 11 Javascript
javascript贪吃蛇完整版(源码)
Dec 09 Javascript
window.location.href IE下跳转失效的解决方法
Mar 27 Javascript
js中通过父级进行查找定位元素
Jun 15 Javascript
AngularJS ng-template寄宿方式用法分析
Nov 07 Javascript
简单实现js放大镜效果
Jul 24 Javascript
bootstrap Table插件使用demo
Aug 07 Javascript
node.js利用mongoose获取mongodb数据的格式化问题详解
Oct 06 Javascript
Vue表单demo v-model双向绑定问题
Jun 29 Javascript
vue2.0实现的tab标签切换效果(内容可自定义)示例
Feb 11 Javascript
Vue注册组件命名时不能用大写的原因浅析
Apr 25 Javascript
Angular之jwt令牌身份验证的实现
Feb 14 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 __autoload函数(自动载入类文件)的使用方法
2012/02/04 PHP
利用yahoo汇率接口实现实时汇率转换示例 汇率转换器
2014/01/14 PHP
基于ThinkPHP5框架使用QueryList爬取并存入mysql数据库操作示例
2019/05/25 PHP
js 蒙版进度条(结合图片)
2010/03/10 Javascript
70+漂亮且极具亲和力的导航菜单设计国外网站推荐
2011/09/20 Javascript
jquery验证邮箱格式并显示提交按钮
2015/11/07 Javascript
谷歌Chrome浏览器扩展程序开发小记
2016/01/06 Javascript
js实现内容显示并使用json传输数据
2016/03/16 Javascript
微信小程序 动态绑定数据及动态事件处理
2017/03/14 Javascript
Angularjs使用指令做表单校验的方法
2017/03/31 Javascript
解决npm安装Electron缓慢网络超时导致失败的问题
2018/02/06 Javascript
关于node-bindings无法在Electron中使用的解决办法
2018/12/18 Javascript
微信小程序通过js实现瀑布流布局详解
2019/08/28 Javascript
JavaScript实现字符串与HTML格式相互转换
2020/03/17 Javascript
Javascript组合继承方法代码实例解析
2020/04/02 Javascript
js 解析 JSON 数据简单示例
2020/04/21 Javascript
Ajax获取node服务器数据的完整步骤
2020/09/20 Javascript
[44:21]Ti4 循环赛第四日 附加赛NEWBEE vs LGD
2014/07/13 DOTA
[02:42]岂曰无衣,与子同袍!DOTA2致敬每一位守护人
2020/02/17 DOTA
在Python中封装GObject模块进行图形化程序编程的教程
2015/04/14 Python
Python之多线程爬虫抓取网页图片的示例代码
2018/01/10 Python
python3使用flask编写注册post接口的方法
2018/12/28 Python
python判断文件夹内是否存在指定后缀文件的实例
2019/06/10 Python
Python如何脚本过滤文件中的注释
2020/05/27 Python
详解H5本地储存Web Storage
2017/07/03 HTML / CSS
HTML5通用接口详解
2016/06/12 HTML / CSS
Eastbay官网:美国最大的运动鞋网络零售商
2016/07/27 全球购物
美国儿童运动鞋和服装零售商:Kids Foot Locker
2017/08/05 全球购物
eBay荷兰购物网站:eBay.nl
2020/06/26 全球购物
opencv实现图像平移效果
2021/03/24 Python
经贸日语专业个人求职信范文
2013/12/28 职场文书
地理教师岗位职责
2014/03/16 职场文书
新年寄语2016
2015/08/17 职场文书
浅谈Nginx 中的两种限流方式
2021/03/31 Servers
MySQL 外键约束和表关系相关总结
2021/06/20 MySQL
你需要掌握的20个Python常用技巧
2022/02/28 Python