nodejs入门教程五:连接数据库的方法分析


Posted in NodeJs onApril 24, 2017

本文实例讲述了nodejs入门教程之连接数据库的方法。分享给大家供大家参考,具体如下:

参考文章链接:  nodejs连接mysql

1.准备工作

在nodejs中没有mysql模块,但npm中提供了mysql,所以可以使用npm安装mysql

命令:npm install mysql, 会生成 node_modules 文件夹 ,如图

nodejs入门教程五:连接数据库的方法分析

执行后发现报了一个警告,说没有package.json 这个文件,只需要执行 npm init -f 的命令就会生成一个这个文件

nodejs入门教程五:连接数据库的方法分析

2.直接连接数据库

mysql.createConnection(Object) 方法与 mysql.createPool(Object)的参数

host 连接数据库所在的主机名. (默认: localhost)
port 连接端口. (默认: 3306)
localAddress 用于TCP连接的IP地址. (可选)
socketPath 链接到unix域的路径。在使用host和port时该参数会被忽略.
user MySQL用户的用户名.
password MySQL用户的密码.
database 链接到的数据库名称 (可选).
charset 连接的字符集. (默认: 'UTF8_GENERAL_CI'.设置该值要使用大写!)
timezone 储存本地时间的时区. (默认: 'local')
stringifyObjects 是否序列化对象. See issue #501. (默认: 'false')
insecureAuth 是否允许旧的身份验证方法连接到数据库实例. (默认: false)
typeCast 确定是否讲column值转换为本地JavaScript类型列值. (默认: true)
queryFormat 自定义的查询语句格式化函数.
supportBigNumbers 数据库处理大数字(长整型和含小数),时应该启用 (默认: false).
bigNumberStrings 启用 supportBigNumbers和bigNumberStrings 并强制这些数字以字符串的方式返回(默认: false).
dateStrings 强制日期类型(TIMESTAMP, DATETIME, DATE)以字符串返回,而不是一javascript Date对象返回. (默认: false)
debug 是否开启调试. (默认: false)
multipleStatements 是否允许在一个query中传递多个查询语句. (Default: false)
flags 链接标志.

连接数据库

var mysql = require('mysql'); //调用MySQL模块
//创建一个connection
var connection = mysql.createConnection({
 host: '192.168.3.3',  //主机
 user: 'root',    //MySQL认证用户名
 password: 'x5',  //MySQL认证用户密码
 database: 'dason_yu',
 port: '3306'     //端口号
});
//创建一个connection
connection.connect(function(err){
 if(err){
  console.log('[query] - :'+err);
  return;
 }
 console.log('[connection connect] succeed!');
});
//执行sql语句
var userAddSql = 'insert into user (id,name,money) values(?,?,?)';
var param = [3,'ccc',200];
/**
 * 执行所有类型的 sql 语句
 * query(sql,arr[],function)
 * @parms: sql:sql语句 arr: 填充站位符的数组,可以缺省
 *   function: 回调函数,result: 结果集,对象组成的数组
 */
connection.query(userAddSql,param,function(err,rs){
 if(err){
  console.log('insert err:',err.message);
  return;
 }
 console.log('insert success');
});
//关闭connection
connection.end(function(err){
 if(err){
  console.log(err.toString());
  return;
 }
 console.log('[connection end] succeed!');
});

3.使用连接池连接数据库

将下面代码写到 httpServer.js 文件中

使用在命令行窗口中 node httpServer.js 运行

var mysql = require('mysql'); //用于创建数据库连接
var pool = mysql.createPool({// 创建数据库连接池
 host : '127.0.0.1' ,
 user : 'root' ,
 password : 'root' ,
 database : 'dason',
 multipleStatements: true
});
/**
 * 获取数据库连接
 * @parms: err:异常 connnection:数据库连接对象
 *
 */
pool.getConnection(function(err,connection){
 if(err){
  console.log(err);
 }
 /**
  * 执行所有类型的 sql 语句
  * query(sql,arr[],function)
  * @parms: sql:sql语句 arr: 填充站位符的数组,可以缺省
  *   function: 回调函数,result: 结果集,对象组成的数组
  */
 connection.query('SELECT * FROM user',function(err,result){
  console.log(result);
  connection.release();//将连接放回连接池
 });
});

结果:

[ RowDataPacket { id: 1, name: 'a', email: 'a@123' },
 RowDataPacket { id: 2, name: 'b', email: 'b@123' },
 RowDataPacket { id: 4, name: 'd', email: 'd@123' },
 RowDataPacket { id: 5, name: 'e', email: 'e@123' },
 RowDataPacket { id: 6, name: 'f', email: 'f@123' },
 RowDataPacket { id: 3, name: 'c', email: 'c@123' },
 RowDataPacket { id: 7, name: 'g', email: 'g@123' } ]

4. end() 与 destroy()、release()

end() 接受一个回调函数,并且会在query结束之后才触发,如果query出错,仍然会终止链接,错误会传递到回调函数中处理。

destroy() 立即终止数据库连接,即使还有query没有完成,之后的回调函数也不会在触发。

release() 将连接放回连接池中。

5.package.json

nodejs入门教程五:连接数据库的方法分析

npm install express ?save
npm install express ?save-dev

上面代码表示单独安装express模块,

?save参数表示将该模块写入dependencies属性,

?save-dev表示将该模块写入devDependencies属性。

希望本文所述对大家nodejs程序设计有所帮助。

NodeJs 相关文章推荐
用nodejs写的一个简单项目打包工具
May 11 NodeJs
nodejs 实现模拟form表单上传文件
Jul 14 NodeJs
nodejs批量修改文件编码格式
Jan 22 NodeJs
NodeJS学习笔记之Connect中间件应用实例
Jan 27 NodeJs
Windows系统下使用Sublime搭建nodejs环境
Apr 13 NodeJs
nodejs导出excel的方法
Jun 30 NodeJs
使用NodeJs 开发微信公众号(三)微信事件交互实例
Mar 02 NodeJs
Nodejs下DNS缓存问题浅析
Nov 16 NodeJs
nodejs实现爬取网站图片功能
Dec 14 NodeJs
nodejs调取微信收货地址的方法
Dec 20 NodeJs
nodejs+mongodb aggregate级联查询操作示例
Mar 17 NodeJs
nodejs实现的http、https 请求封装操作示例
Feb 06 NodeJs
nodejs入门教程四:URL相关模块用法分析
Apr 24 #NodeJs
nodejs入门教程三:调用内部和外部方法示例
Apr 24 #NodeJs
nodejs入门教程二:创建一个简单应用示例
Apr 24 #NodeJs
nodejs入门教程一:概念与用法简介
Apr 24 #NodeJs
nodejs 终端打印进度条实例代码
Apr 22 #NodeJs
详解如何在NodeJS项目中优雅的使用ES6
Apr 22 #NodeJs
nodejs和C语言插入mysql数据库乱码问题的解决方法
Apr 14 #NodeJs
You might like
背景图跟随鼠标移动的Mootools插件实现代码
2011/12/12 Javascript
动态加载script文件的两种方法
2013/08/15 Javascript
jquery ajax双击div可直接修改div中的内容
2016/03/04 Javascript
NodeJS的Promise的用法解析
2016/05/05 NodeJs
jQuery实现下拉框多选 jquery-multiselect 的实例代码
2016/07/14 Javascript
简单实现Vue的observer和watcher
2016/12/21 Javascript
Vuejs入门教程之Vue生命周期,数据,手动挂载,指令,过滤器
2017/04/19 Javascript
javascript中new Array()和var arr=[]用法区别
2017/12/01 Javascript
Three.js 再探 - 写一个微信跳一跳极简版游戏
2018/01/04 Javascript
vue2.0 循环遍历加载不同图片的方法
2018/03/06 Javascript
使用live-server快速搭建本地服务器+自动刷新的方法
2018/03/09 Javascript
nodejs用gulp管理前端文件方法
2018/06/24 NodeJs
angular 内存溢出的问题解决
2018/07/12 Javascript
解决ie11 SCRIPT5011:不能执行已释放Script的代码问题
2019/05/05 Javascript
jQuery实现图片随机切换、抽奖功能(实例代码)
2019/10/23 jQuery
js实现旋转木马轮播图效果
2020/01/10 Javascript
jquery实现异步文件上传ajaxfileupload.js
2020/10/23 jQuery
Python实现从订阅源下载图片的方法
2015/03/11 Python
Python中使用PDB库调试程序
2015/04/05 Python
在Linux下调试Python代码的各种方法
2015/04/17 Python
Python中set与frozenset方法和区别详解
2016/05/23 Python
Python实现判断一行代码是否为注释的方法
2018/05/23 Python
儿童学习python的一些小技巧
2018/05/27 Python
numpy:np.newaxis 实现将行向量转换成列向量
2019/11/30 Python
python3 webp转gif格式的实现示例
2019/12/10 Python
Django封装交互接口代码
2020/07/12 Python
如何使用Python自动生成报表并以邮件发送
2020/10/15 Python
size?法国官网:英国伦敦的球鞋精品店
2020/03/15 全球购物
上班离岗检讨书
2014/01/27 职场文书
铁路个人事迹材料
2014/01/30 职场文书
小学安全教育材料
2014/02/17 职场文书
工厂采购员岗位职责
2014/04/08 职场文书
KTV门卫岗位职责
2014/10/09 职场文书
我的兄弟姐妹观后感
2015/06/15 职场文书
关于JavaScript 中 if包含逗号表达式
2021/11/27 Javascript
css3中2D转换之有趣的transform形变效果
2022/02/24 HTML / CSS