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
基于html5和nodejs相结合实现websocket即使通讯
Nov 19 NodeJs
NodeJS创建基础应用并应用模板引擎
Apr 12 NodeJs
深入浅析Nodejs的Http模块
Jun 20 NodeJs
NodeJS自定义模块写法(详解)
Jun 27 NodeJs
关于Mac下安装nodejs、npm和cnpm的教程
Apr 11 NodeJs
nodejs更改项目端口号的方法
May 13 NodeJs
nodejs中方法和模块用法示例
Dec 24 NodeJs
nodejs微信开发之接入指南
Mar 17 NodeJs
纯异步nodejs文件夹(目录)复制功能
Sep 03 NodeJs
nodejs中使用archive压缩文件的实现代码
Nov 26 NodeJs
NodeJs使用webpack打包项目的方法详解
Feb 28 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
《星际争霸》各版本雷兽特点图文解析 雷兽不同形态一览
2020/03/02 星际争霸
PHP Undefined index报错的修复方法
2011/07/17 PHP
PHP正确解析UTF-8字符串技巧应用
2012/11/07 PHP
PHP获取mysql数据表的字段名称和详细信息的方法
2014/09/27 PHP
php简单处理XML数据的方法示例
2017/05/19 PHP
PHP预定义超全局数组变量小结
2018/08/20 PHP
PHP 99乘法表的几种实现代码
2020/10/13 PHP
JS中for循序中延迟加载动态效果的具体实现
2013/08/18 Javascript
Firefox和IE兼容性问题及解决方法总结
2013/10/08 Javascript
jquery实现瀑布流效果分享
2014/03/26 Javascript
jQuery源码解读之hasClass()方法分析
2015/02/20 Javascript
jQuery使用prepend()方法在元素前添加内容用法实例
2015/03/26 Javascript
javascript去掉代码里面的注释
2015/07/24 Javascript
JavaScript实现的多种鼠标拖放效果
2015/11/03 Javascript
jQuery easyui刷新当前tabs的方法
2016/09/23 Javascript
修改ligerui 默认确认按钮的方法
2016/12/27 Javascript
jquery Form轻松实现文件上传
2017/05/24 jQuery
vue-awesome-swiper滑块插件使用方法详解
2017/11/27 Javascript
webpack4.0 入门实践教程
2018/10/08 Javascript
从源码里了解vue中的nextTick的使用
2018/11/22 Javascript
js中async函数结合promise的小案例浅析
2019/04/14 Javascript
webpack 代码分离优化快速指北
2019/05/18 Javascript
关于Node.js中频繁修改代码重启服务器的问题
2020/10/15 Javascript
微信小程序实现底部弹出框
2020/11/18 Javascript
Python contextlib模块使用示例
2015/02/18 Python
对PyQt5中树结构的实现方法详解
2019/06/17 Python
django-初始配置(纯手写)详解
2019/07/30 Python
Python英文文章词频统计(14份剑桥真题词频统计)
2019/10/13 Python
python 基于opencv实现图像增强
2020/12/23 Python
澳大利亚网上玩具商店:Mr Toys Toyworld
2018/03/25 全球购物
读书心得体会
2013/12/28 职场文书
会计学生自我鉴定
2014/02/06 职场文书
物业管理毕业生的自我评价
2014/02/17 职场文书
单位在职证明书
2014/09/11 职场文书
六查六看自查报告
2014/10/14 职场文书
vue中data改变后让视图同步更新的方法
2021/03/29 Vue.js