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 实现模拟form表单上传文件
Jul 14 NodeJs
Nodejs+express+html5 实现拖拽上传
Aug 08 NodeJs
Nodejs为什么选择javascript为载体语言
Jan 13 NodeJs
NodeJS学习笔记之Connect中间件模块(一)
Jan 27 NodeJs
NodeJs基本语法和类型
Feb 13 NodeJs
Nodejs中session的简单使用及通过session实现身份验证的方法
Feb 04 NodeJs
用nodejs的实现原理和搭建服务器(动态)
Aug 10 NodeJs
详解nodejs爬虫程序解决gbk等中文编码问题
Apr 06 NodeJs
nodejs6下使用koa2框架实例
May 18 NodeJs
NodeJS收发GET和POST请求的示例代码
Aug 25 NodeJs
nodejs基于express实现文件上传的方法
Mar 19 NodeJs
基于Nodejs的Tcp封包和解包的理解
Sep 19 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
数字转英文
2006/12/06 PHP
elgg 获取文件图标地址的方法
2010/03/20 PHP
PHP生成不同颜色、不同大小的tag标签函数
2013/09/23 PHP
PHP+memcache实现消息队列案例分享
2014/05/21 PHP
PHP实现PDO操作mysql存储过程示例
2019/02/13 PHP
TP5框架实现上传多张图片的方法分析
2020/03/29 PHP
jquery 指南/入门基础
2007/11/30 Javascript
密码框显示提示文字jquery示例
2013/08/29 Javascript
Node.js模拟浏览器文件上传示例
2014/03/26 Javascript
改变状态栏文字的js代码
2014/06/13 Javascript
简单介绍jsonp 使用小结
2016/01/27 Javascript
利用jQuery实现一个简单的表格上下翻页效果
2017/03/14 Javascript
Vuex简单入门
2017/04/19 Javascript
jQuery Ajax自定义分页组件(jquery.loehpagerv1.0)实例详解
2017/05/01 jQuery
js+html获取系统当前时间
2017/11/10 Javascript
jquery动态添加以及遍历option并获取特定样式名称的option方法
2018/01/29 jQuery
微信小程序项目总结之记账小程序功能的实现(包括后端)
2019/08/20 Javascript
Vue.js暴露方法给WebView的使用操作
2020/09/07 Javascript
vue 公共列表选择组件,引用Vant-UI的样式方式
2020/11/02 Javascript
[09:40]DAC2018 4.5 SOLO赛 MidOne vs Miracle
2018/04/06 DOTA
[47:20]DAC2018 4.4 淘汰赛 Optic vs Mineski 第一场
2018/04/05 DOTA
不要用强制方法杀掉python线程
2017/02/26 Python
Python的SimpleHTTPServer模块用处及使用方法简介
2018/01/22 Python
Python3 replace()函数使用方法
2018/03/19 Python
对Python中数组的几种使用方法总结
2018/06/28 Python
python中文编码与json中文输出问题详解
2018/08/24 Python
python中selenium操作下拉滚动条的几种方法汇总
2019/07/14 Python
解决 jupyter notebook 回车换两行问题
2020/04/15 Python
基于python实现模拟数据结构模型
2020/06/12 Python
Python matplotlib读取excel数据并用for循环画多个子图subplot操作
2020/07/14 Python
linux centos 7.x 安装 python3.x 替换 python2.x的过程解析
2020/12/14 Python
成考报名单位证明范本
2014/01/16 职场文书
工作睡觉检讨书
2014/02/25 职场文书
离婚协议书格式
2014/11/21 职场文书
2016应届毕业生实习心得体会
2015/10/09 职场文书
Win11怎么修改电源模式?Win11修改电源模式的方法
2022/04/05 数码科技