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 AutoComplete自动完成 的使用方法实例
Mar 19 Javascript
jQuery下实现等待指定元素加载完毕(可改成纯js版)
Jul 11 Javascript
jquery 按键盘上的enter事件
May 11 Javascript
JavaScript列表框listbox全选和反选的实现方法
Mar 18 Javascript
javascript实现获取服务器时间
May 19 Javascript
网页收藏夹显示ICO图标(代码少)
Aug 04 Javascript
Javascript中浏览器窗口的基本操作总结
Aug 18 Javascript
用POSTMAN发送JSON格式的POST请求示例
Sep 04 Javascript
在vue项目中使用sass语法问题
Jul 18 Javascript
Vue指令之 v-cloak、v-text、v-html实例详解
Aug 08 Javascript
微信小程序实现注册登录功能(表单校验、错误提示)
Dec 10 Javascript
JS实现TITLE悬停长久显示效果完整示例
Feb 11 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的list()的一步操作给一组变量进行赋值的使用
2011/05/18 PHP
测试PHP连接MYSQL成功与否的代码
2013/08/16 PHP
php下获取http状态的实现代码
2014/05/09 PHP
php5.2以下版本无json_decode函数的解决方法
2014/05/25 PHP
PHP之sprintf函数用法详解
2014/11/12 PHP
php删除左端与右端空格的方法
2014/11/29 PHP
php实现递归抓取网页类实例
2015/04/03 PHP
php实现网页缓存的工具类分享
2015/07/14 PHP
PHP中数组转换为SimpleXML教程
2019/01/27 PHP
XHTML下,JS浮动代码失效的问题
2009/11/12 Javascript
javascript中"/"运算符常见错误
2010/10/13 Javascript
js判断输入是否为数字的具体实例
2013/08/03 Javascript
JS实现控制表格单元格垂直对齐的方法
2015/03/30 Javascript
jquery控制页面部分刷新的方法
2015/06/24 Javascript
基于JS代码实现图片在页面中旋转效果
2016/06/16 Javascript
JavaScript Ajax编程 应用篇
2016/07/02 Javascript
JavaScript中定时控制Throttle、Debounce和Immediate详解
2016/11/17 Javascript
Angular 4依赖注入学习教程之InjectToken的使用(八)
2017/06/04 Javascript
webpack学习教程之publicPath路径问题详解
2017/06/17 Javascript
详解ES6数组方法find()、findIndex()的总结
2020/05/12 Javascript
详解Python的单元测试
2015/04/28 Python
在python的类中动态添加属性与生成对象
2016/09/17 Python
Python cookbook(数据结构与算法)实现对不原生支持比较操作的对象排序算法示例
2018/03/15 Python
pycharm实现在子类中添加一个父类没有的属性
2020/03/12 Python
python:删除离群值操作(每一行为一类数据)
2020/06/08 Python
PyCharm中配置PySide2的图文教程
2020/06/18 Python
video.js支持m3u8格式直播的实现示例
2020/05/20 HTML / CSS
如何配置、使用和清除Smarty缓存
2015/12/23 面试题
请用Python写一个获取用户输入数字,并根据数字大小输出不同信息的脚本
2014/05/20 面试题
大学生英语演讲稿
2014/04/24 职场文书
工作散漫检讨书
2014/09/16 职场文书
中学综治宣传月活动总结
2015/05/07 职场文书
工作感言一句话
2015/08/01 职场文书
消防安全培训工作总结
2015/10/23 职场文书
施工安全协议书
2016/03/22 职场文书
Nginx已编译的nginx-添加新模块
2021/04/01 Servers