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 22 NodeJs
nodejs事件的监听与触发的理解分析
Feb 12 NodeJs
详解Nodejs基于mongoose模块的增删改查的操作
Dec 21 NodeJs
基于NodeJS+MongoDB+AngularJS+Bootstrap开发书店案例分析
Jan 12 NodeJs
nodejs接入阿里大鱼短信验证码的方法
Jul 10 NodeJs
nodejs后台集成ueditor富文本编辑器的实例
Jul 11 NodeJs
使用Nodejs连接mongodb数据库的实现代码
Aug 21 NodeJs
nodejs微信扫码支付功能实现
Feb 17 NodeJs
nodeJS模块简单用法示例
Apr 21 NodeJs
nodejs实现聊天机器人功能
Sep 19 NodeJs
nodejs实现百度舆情接口应用示例
Feb 07 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 a simple smtp class
2007/11/26 PHP
PHP中ADODB类详解
2008/03/25 PHP
用php+javascript实现二级级联菜单的制作
2008/05/06 PHP
php第一次无法获取cookie问题处理
2014/12/15 PHP
php中explode的负数limit用法分析
2015/02/27 PHP
深入理解PHP 数组之count 函数
2016/06/13 PHP
PHP处理CSV表格文件的常用操作方法总结
2016/07/01 PHP
php获取文章内容第一张图片的方法示例
2017/07/03 PHP
PHP基于curl实现模拟微信浏览器打开微信链接的方法示例
2019/02/15 PHP
JS处理VBArray的函数使用说明
2008/05/11 Javascript
js判断选择时间不能小于当前时间的示例代码
2013/09/24 Javascript
javascript实现文本域写入字符时限定字数
2014/02/12 Javascript
JS获取Table中td值的方法
2015/03/19 Javascript
JavaScript实现点击文字切换登录窗口的方法
2015/05/11 Javascript
利用vue-router实现二级菜单内容转换
2016/11/30 Javascript
js实现简单的计算器功能
2017/01/16 Javascript
Ionic+AngularJS实现登录和注册带验证功能
2017/02/09 Javascript
jQuery中 bind的用法简单介绍
2017/02/13 Javascript
Vue中的基础过渡动画及实现原理解析
2018/12/04 Javascript
jquery 验证用户名是否重复代码实例
2019/05/14 jQuery
JavaScript canvas实现雨滴特效
2021/01/10 Javascript
[35:26]DOTA2上海特级锦标赛B组小组赛#2 VG VS Fnatic第三局
2016/02/26 DOTA
[40:48]DOTA2上海特级锦标赛D组败者赛 Liquid VS COL第二局
2016/02/28 DOTA
[08:38]DOTA2-DPC中国联赛 正赛 VG vs Elephant 选手采访
2021/03/11 DOTA
Python3基础之输入和输出实例分析
2014/08/18 Python
python3实现ftp服务功能(客户端)
2017/03/24 Python
python爬虫 execjs安装配置及使用
2019/07/30 Python
Python无损压缩图片的示例代码
2020/08/06 Python
兰蔻俄罗斯官方网站:Lancome俄罗斯
2019/12/09 全球购物
实习护士自我鉴定
2013/10/13 职场文书
机电一体化专业应届生求职信
2013/11/27 职场文书
老师对学生的评语
2014/04/18 职场文书
企业宣传策划方案
2014/05/29 职场文书
绍兴鲁迅故居导游词
2015/02/09 职场文书
python 提取html文本的方法
2021/05/20 Python
Python学习之时间包使用教程详解
2022/03/21 Python