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实现的一个简单聊天室功能分享
Dec 06 NodeJs
NodeJs基本语法和类型
Feb 13 NodeJs
Jquery通过ajax请求NodeJS返回json数据实例
Nov 08 NodeJs
nodejs的HTML分析利器node-jquery用法浅析
Nov 08 NodeJs
nodejs爬虫遇到的乱码问题汇总
Apr 07 NodeJs
浅析 NodeJs 的几种文件路径
Jun 07 NodeJs
nodejs async异步常用函数总结(推荐)
Nov 17 NodeJs
nodejs实现截取上传视频中一帧作为预览图片
Dec 10 NodeJs
nodejs简单读写excel内容的方法示例
Mar 16 NodeJs
NodeJs入门教程之定时器和队列
Mar 08 NodeJs
NodeJS 文件夹拷贝以及删除功能
Sep 03 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
利用php+mcDropdown实现文件路径可在下拉框选择
2013/08/07 PHP
深入解析php中的foreach函数
2013/08/31 PHP
php初始化对象和析构函数的简单实例
2014/03/11 PHP
让网页根据不同IE版本显示不同的内容
2009/02/08 Javascript
JS在IE和FF下attachEvent,addEventListener学习笔记
2009/11/26 Javascript
JQuery中使用.each()遍历元素学习笔记
2014/11/08 Javascript
基于javascript实现判断移动终端浏览器版本信息
2014/12/09 Javascript
使用Web Uploader实现多文件上传
2016/06/08 Javascript
jsonp跨域请求详解
2017/07/13 Javascript
Javascript中的getter和setter初识
2017/08/17 Javascript
详解JavaScript添加给定的标签选项
2018/09/17 Javascript
小程序实现抽奖动画
2020/04/16 Javascript
详解基于iview-ui的导航栏路径(面包屑)配置
2019/02/22 Javascript
js实现带搜索功能的下拉框
2020/01/11 Javascript
es6 super关键字的理解与应用实例分析
2020/02/15 Javascript
VSCode搭建Vue项目的方法
2020/04/30 Javascript
Antd-vue Table组件添加Click事件,实现点击某行数据教程
2020/11/17 Javascript
Python简明入门教程
2015/08/04 Python
Python中使用遍历在列表中添加字典遇到的坑
2019/02/27 Python
python pygame实现五子棋小游戏
2020/10/26 Python
python global关键字的用法详解
2019/09/05 Python
python批量处理txt文件的实例代码
2020/01/13 Python
keras 使用Lambda 快速新建层 添加多个参数操作
2020/06/10 Python
Python sqlalchemy时间戳及密码管理实现代码详解
2020/08/01 Python
CSS3实现头像旋转效果
2017/03/13 HTML / CSS
html5的localstorage详解
2017/05/09 HTML / CSS
英国床和浴室商场:Bed & Bath Emporium
2018/05/20 全球购物
大学毕业生自我鉴定
2013/11/05 职场文书
销售人员获奖感言
2014/02/05 职场文书
党员先进性教育整改措施
2014/09/18 职场文书
个人授权委托书范本格式
2014/10/12 职场文书
党员贯彻十八大精神思想汇报范文
2014/10/25 职场文书
群众路线自我剖析及整改措施
2014/11/04 职场文书
2016年教师节慰问信
2015/12/01 职场文书
详解TypeScript中的类型保护
2021/04/29 Javascript
MySQL系列之十四 MySQL的高可用实现
2021/07/02 MySQL