这里有新鲜出炉的 Node.JS 入门教程,程序狗速度看过来!
Node.js 是一个基于 Chrome JavaScript 运行时建立的一个平台, 用来方便地搭建快速的 易于扩展的网络应用 · Node.js 借助事件驱动, 非阻塞 I/O 模型变得轻量和高效, 非常适合 运行在分布式设备 的 数据密集型 的实时应用
本篇文章主要介绍了 nodejs 进阶 (6)—连接 MySQL 数据库示例,详细的介绍了 NodeJS 操作 MySQL 数据库,作为应用最为广泛的开源数据库则成为我们的首选,有兴趣的可以了解一下。
1. 建库连库
连接 MySQL 数据库需要安装支持
- npm install mysql
我们需要提前安装按 mysql sever 端
建一个数据库 mydb1
- mysql> CREATE DATABASE mydb1;
- mysql> SHOW DATABASES;
- +--------------------+
- | Database |
- +--------------------+
- | information_schema |
- | mysql |
- | mydb1 |
- | performance_schema |
- +--------------------+
- 4 rows in set (0.00 sec)
然后建一张表 user 如下
- create table user(
- id int not null primary key auto_increment,
- name VARCHAR(100) not null,
- pwd VARCHAR(100) not null,
- create_date TIMESTAMP NULL DEFAULT now()
- )ENGINE=InnoDB DEFAULT CHARSET=utf8;
- CREATE UNIQUE INDEX t_quiz_IDX_0 on user(name);
接下来我们利用 nodejs 连接 mysql 数据库
- var mysql = require('mysql'); //调用MySQL模块
- //创建一个connection
- var connection = mysql.createConnection({
- host: 'localhost',
- //主机
- user: 'root',
- //MySQL认证用户名
- password: 'root',
- //MySQL认证用户密码
- database: 'mydb1',
- port: '3306' //端口号
- });
- //创建一个connection
- connection.connect(function(err) {
- if (err) {
- console.log('[query] - :' + err);
- return;
- }
- console.log('[connection connect] succeed!');
- });
- //----插入
- var userAddSql = 'insert into user (name,pwd) values(?,?)';
- var param = ['fff', '123'];
- connection.query(userAddSql, param,
- function(err, rs) {
- if (err) {
- console.log('insert err:', err.message);
- return;
- }
- console.log('insert success');
- });
- //执行查询
- connection.query('SELECT * from user where id=?', [2],
- function(err, rs) {
- if (err) {
- console.log('[query] - :' + err);
- return;
- }
- for (var i = 0; i < rs.length; i++) {
- console.log('The solution is: ', rs[i].uname);
- }
- });
- //关闭connection
- connection.end(function(err) {
- if (err) {
- console.log(err.toString());
- return;
- }
- console.log('[connection end] succeed!');
- });
但是实际每次创建连接都需要一定的开销,执行效率就会有影响。下面介绍一种连接池连 mysql 的方法:node-mysql
2. 连接池配置使用
node-mysql 是目前最火的 node 下的 mysql 驱动,是 mysqlpool 的一个模块。
下面的代码是提供一个连接池,getPool 函数返回 createPool 创建的数据库连接池对象。
- var mysql = require('mysql'); //调用MySQL模块
- function OptPool() {
- this.flag = true; //是否连接过
- this.pool = mysql.createPool({
- host: 'localhost',
- //主机
- user: 'root',
- //MySQL认证用户名
- password: 'root',
- //MySQL认证用户密码
- database: 'test',
- port: '3306' //端口号
- });
- this.getPool = function() {
- return this.pool;
- }
- };
- module.exports = OptPool;
下面的代码展示如何使用这个连接池,插入和查询的使用。需要注意的是 conn.release(); // 释放一个连接放回连接池 需要再操作结束后再执行,否则后面的数据库操作会报错。
- var OptPool = require('./models/OptPool');
- var optPool = new OptPool();
- var pool = optPool.getPool();
- //执行SQL语句
- //从连接池中获取一个连接
- pool.getConnection(function(err, conn) {
- //----插入
- var userAddSql = 'insert into user (uname,pwd) values(?,?)';
- var param = ['eee', 'eee'];
- conn.query(userAddSql, param,
- function(err, rs) {
- if (err) {
- console.log('insert err:', err.message);
- return;
- }
- console.log('insert success');
- //conn.release(); //放回连接池
- })
- //查询
- conn.query('SELECT * from user',
- function(err, rs) {
- if (err) {
- console.log('[query] - :' + err);
- return;
- }
- for (var i = 0; i < rs.length; i++) {
- console.log(rs[i].uname);
- }
- conn.release(); //放回连接池
- });
- });
下面介绍一个复杂一点的增删查改的数据库操作,因相互之间有依赖,所以代码可读性就变得特别差。
- var OptPool = require('./models/OptPool');
- var optPool = new OptPool();
- var pool = optPool.getPool();
- var insertSQL = 'insert into table1(name,pwd) values("conan","123"),("fens.me","456")';
- var selectSQL = 'select * from table1 limit 10';
- var deleteSQL = 'delete from table1';
- var updateSQL = 'update table1 set name="conan update" where name="conan"';
- pool.getConnection(function(err, conn) {
- //delete
- conn.query(deleteSQL,
- function(err0, res0) {
- if (err0) console.log(err0);
- console.log("DELETE Return ==> ");
- console.log(res0);
- //insert
- conn.query(insertSQL,
- function(err1, res1) {
- if (err1) console.log(err1);
- console.log("INSERT Return ==> ");
- console.log(res1);
- //query
- conn.query(selectSQL,
- function(err2, rows) {
- if (err2) console.log(err2);
- console.log("SELECT ==> ");
- for (var i in rows) {
- console.log(rows[i]);
- }
- //update
- conn.query(updateSQL,
- function(err3, res3) {
- if (err3) console.log(err3);
- console.log("UPDATE Return ==> ");
- console.log(res3);
- //query
- conn.query(selectSQL,
- function(err4, rows2) {
- if (err4) console.log(err4);
- console.log("SELECT ==> ");
- for (var i in rows2) {
- console.log(rows2[i]);
- }
- });
- });
- });
- });
- });
- })
来源: http://www.phperz.com/article/17/0430/328796.html