• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > 关于node操作mysql数据库示例代码分享

关于node操作mysql数据库示例代码分享

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-05

匿名通过本文主要向大家介绍了node,mysql,数据库等相关知识,希望本文的分享对您有所帮助
这篇文章主要介绍了node操作mysql数据库,结合实例形式较为详细的分析了node操作数据库的连接、增删改查、事务处理及错误处理相关操作技巧,需要的朋友可以参考下

本文实例讲述了node操作mysql数据库的方法。分享给大家供大家参考,具体如下:

1、建立数据库连接:createConnection(Object)方法

该方法接受一个对象作为参数,该对象有四个常用的属性host,user,password,database。与php中链接数据库的参数相同。属性列表如下:

host连接数据库所在的主机名. (默认: localhost)
port连接端口. (默认: 3306)
localAddress用于TCP连接的IP地址. (可选)
socketPath链接到unix域的路径。在使用host和port时该参数会被忽略.
userMySQL用户的用户名.
passwordMySQL用户的密码.
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 connection = mysql.createConnection('mysql://user:pass@host/db?debug=true&charset=BIG5_CHINESE_CI&timezone=-0700');

2、结束数据库连接end()和destroy()

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

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

3、创建连接池 createPool(Object) Object和createConnection参数相同。

可以监听connection事件,并设置session值

pool.on('connection', function(connection) {
 connection.query('SET SESSION auto_increment_increment=1')
});

connection.release()释放链接到连接池。如果需要关闭连接并且删除,需要使用connection.destroy()

pool除了接受和connection相同的参数外,还接受几个扩展的参数

createConnection用于创建链接的函数. (Default: mysql.createConnection)
waitForConnections决定当没有连接池或者链接数打到最大值时pool的行为. 为true时链接会被放入队列中在可用是调用,为false时会立即返回error. (Default: true)
connectionLimit最大连接数. (Default: 10)
queueLimit连接池中连接请求的烈的最大长度,超过这个长度就会报错,值为0时没有限制. (Default: 0)

4、连接池集群

允许不同的host链接

// create
var poolCluster = mysql.createPoolCluster();
poolCluster.add(config); // anonymous group
poolCluster.add('MASTER', masterConfig);
poolCluster.add('SLAVE1', slave1Config);
poolCluster.add('SLAVE2', slave2Config);
// Target Group : ALL(anonymous, MASTER, SLAVE1-2), Selector : round-robin(default)
poolCluster.getConnection(function (err, connection) {});
// Target Group : MASTER, Selector : round-robin
poolCluster.getConnection('MASTER', function (err, connection) {});
// Target Group : SLAVE1-2, Selector : order
// If can't connect to SLAVE1, return SLAVE2. (remove SLAVE1 in the cluster)
poolCluster.on('remove', function (nodeId) {
   console.log('REMOVED NODE : ' + nodeId); // nodeId = SLAVE1
});
poolCluster.getConnection('SLAVE*', 'ORDER', function (err, connection) {});
// of namespace : of(pattern, selector)
poolCluster.of('*').getConnection(function (err, connection) {});
var pool = poolCluster.of('SLAVE*', 'RANDOM');
pool.getConnection(function (err, connection) {});
pool.getConnection(function (err, connection) {});
// destroy
poolCluster.end();

链接集群的可选参数

canRetry值为true时,允许连接失败时重试(Default: true)
removeNodeErrorCount当连接失败时 errorCount 值会增加. 当errorCount 值大于 removeNodeErrorCount 将会从PoolCluster中删除一个节点. (Default: 5)
defaultSelector默认选择器. (Default: RR)
RR循环. (Round-Robin)
RANDOM通过随机函数选择节点.
ORDER无条件地选择第一个可用节点.

5、切换用户/改变连接状态

Mysql允许在比断开连接的的情况下切换用户

connection.changeUser({user : 'john'}, function(err) {
 if (err) throw err;
});

参数

user新的用户 (默认为早前的一个).
password新用户的新密码 (默认为早前的一个).
charset新字符集 (默认为早前的一个).
database新数据库名称 (默认为早前的一个).

6、处理服务器连接断开

var db_config = {
  host: 'localhost',
  user: 'root',
  password: '',
  database: 'example'
};
var connection;
function handleDisconnect() {
 connection = mysql.createConnection(db_config); // Recreate the connection, since
                         // the old one cannot be reused.
 connection.connect(function(err) {       // The server is either down
  if(err) {                   // or restarting (takes a while sometimes).
   console.log('error when connecting to db:', err);
   setTimeout(handleDisconnect, 2000); // We introduce a delay before attempting to reconnect,
  }                   // to avoid a hot loop, and to allow our node script to
 });                   // process asynchronous requests in the meantime.
                     // If you're also serving http, display a 503 error.
 connection.on('error', function(err) {
  console.log('db error', err);
  if(err.code === 'PROTOCOL_CONNECTION_LOST') { // Connection to the MySQL server is usually
   handleDisconnect();             // lost due to either server restart, or a
  } else {                   // connnection idle timeout (the wait_timeout
   throw err;                 // server variable configures this)
  }
 });
}
handleDisconnect();

7、转义查询值

为了避免SQL注入攻击,需要转义用户提交的数据。可以使用connection.escape() 或者 pool.escape()

例如:

var userId = 'some user provided value';
var sql  = 'SELECT * FROM users WHERE id = ' + connection.escape(userId);
connection.query(sql, function(err, results) {
   // ...
});

或者使用?作为占位符

connection.query('SELECT * FROM users WHERE id = ?', [userId], function(err, results) {
   // ...
});

不同类型值的转换结果

Numbers 不变
Booleans 转换为字符串 'true'

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 关于mysql innodb启动失败无法重启的处理方法讲解
  • mysql数据库使用Node.js实现连接功能的示例
  • NodeJS中MySql的增删改查基础写法的实现
  • 关于NodeJs如何使用Mysql模块实现事务处理实例
  • 关于node操作mysql数据库示例代码分享
  • 报错-nodejs链接mysql数据库错误

相关文章

  • 2017-05-11windows下忘记MySQL密码的修改方法
  • 2017-05-11解析mysql修改为utf8后仍然有乱码的问题
  • 2017-10-09MySQL5.7 group by报错1055
  • 2018-12-05python描述符descriptor(一)
  • 2018-12-05关于MySQL5.7 mysql command line client使用命令详解
  • 2018-12-05mysql数据库插入速度和读取速度的调整记录
  • 2018-12-05sqlserver 2000中创建用户的图文方法
  • 2018-12-05总结一些MySQL陷阱
  • 2018-12-05MySQL InnoDB之事务与锁详解
  • 2018-12-05mysql的bug测试--针对高并发进行测试

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • sql查询数组中in的使用方法
    • mybatis分页插件pageHelper实例详解
    • 发现mysql一个用法,比较有用
    • MySQL中导出用户权限设置的脚本分享
    • Oracle update关联表的思路总结
    • mysql 服务意外停止1067错误解决办法小结
    • 高性能MySQL读书笔记 找出谁持有锁
    • mysql部分替换sql语句分享
    • mysql主从服务器同步心得体会第1/2页
    • mysql生成随机字符串函数分享

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有