使用Node作Web开发,基本上都是使用NoSQL
数据库,最频繁的就是使用MongoDB了,本身作了一些简单的Web开发,为了下降学习门槛,一直使用MySQL
来作数据库。这里简单介绍一下链接MySQL
数据库的方式,但愿能帮助到其余人。mysql
npm install --save mysql
使用上述命令安装完MySQL
的模块后,就能够直接使用了,官网的DOCS里一个简单的例子以下就能够入门了。sql
var mysql = require('mysql'); var connection = mysql.createConnection({ host: 'localhost', user: 'me', password : 'secret', database : 'my_db' }); connection.connect(); connection.query('SELECT 1 + 1 AS solution', function(err, rows, fields) { if (err) throw err; console.log('The solution is: ', rows[0].solution); }); connection.end();
很简单的一个例子,从上面的例子能够得出:使用createConnection(option)
方法建立一个链接对象,而后链接对象的connect()
方法建立链接,最后使用query()
方法执行SQL语句,返回结果做为回调函数的参数rows
返回,rows
为数组类型。mongodb
建立链接对象,须要传入链接数据库的一些链接参数,也就是createConnection(option)
里的option
,option
是一个对象,以键值对的形式传入createConnection()
方法里。上例列举出了最基本的参数:数据库
host
主机名npm
user
链接数据库的用户json
password
密码数组
database
数据库名称函数
还有其余的参数,能够查询下官方DOCS,这里不一一列举了,初期学习上面这些参数就足以。学习
关闭一个链接使用end()
方法,end()
方法提供一个回调函数,以下:测试
connect.end(function(err){ console.log('End a connection'); });
这是建议使用的方法,end()
方法会等待链接回调完成后才关闭链接。官方还提供了另一种方法destroy()
方法,这个方法直接关闭链接,不会等待回调完成。
举个简单的例子:
var mysql = require('mysql'); var option = require('./connect.js').option; var conn = mysql.createConnection(option); conn.query('select * from message',function(err,rows,fields){ if(!err){ console.log(rows); } }); conn.end(function(err){ console.log('end a connection'); });
最终结果会是:先打印完SELECT
数据表结果后,再打印end a connection
。而若是你将关闭方法换成conn.destroy();
,那么你就别想返回任何结果了,由于还没等回调结束就已经终止链接了。
链接池的原理是一开始就给你建立多个链接对象放在一个“池子”里,用的时候取一个,用完了放回“池子”里,在必定程度上是有利于节省系统开销的,由于链接对象是在最开始的时候就建立好了,使用的时候再也不须要系统开销去建立数据库链接对象。官方DOCS介绍了链接方法:
var mysql = require('mysql'); var pool = mysql.createPool({ connectionLimit : 10, host : 'example.org', user : 'bob', password : 'secret', database : 'my_db' }); pool.query('SELECT 1 + 1 AS solution', function(err, rows, fields) { if (err) throw err; console.log('The solution is: ', rows[0].solution); });
建立链接池的方法是createPool(option)
,option
里多了一个参数connectionLimit
指的是一次性在链接池里建立多少个链接对象,默认10个。若是你想共享一个链接对象,可使用下面方法进行链接;
var mysql = require('mysql'); var pool = mysql.createPool({ host : 'example.org', user : 'bob', password : 'secret', database : 'my_db' }); pool.getConnection(function(err, connection) { // Use the connection connection.query( 'SELECT something FROM sometable', function(err, rows) { // And done with the connection. connection.release(); // Don't use the connection here, it has been returned to the pool. }); // Use the connection connection.query( 'SELECT something2 FROM sometable2', function(err, rows) { // And done with the connection. connection.release(); // Don't use the connection here, it has been returned to the pool. }); });
使用一个链接对象执行两次query()
函数。
使用基本的链接方式来链接数据库,分别定义数据链接以及关闭的function
,以下示例:
// connect.js 数据库链接与关闭 var mysql = require('mysql'); var config = require('./config.json'); // 将数据库链接参数写入mysql对象,即config.mysql var connCount = 0; // 统计目前未关闭的链接 exports.getConn = function(){ connCount ++; console.log('............................OPEN a connection, has '+ connCount + ' connection.'); return mysql.createConnection(config.mysql); }; exports.endConn = function(conn){ conn.end(function(err){ if(!err){ connCount --; console.log('.........................CLOSE a connection, has '+ connCount + ' connection.'); } }); };
而后给个使用数据库的示例,
// db.js 查询用户信息 var connect = require('./connect.js'); // 引入数据链接方法 exports.getUser = function(username, callback){ var connection = connect.getConn(); var sql = 'select * from user where username = "' + username + '"'; connection.query(sql,function(err,rows,fields){ callback(err,rows,fields); }); connect.endConn(connection); }
使用数据库链接池,一样先建立数据库链接池的方法,以下两种方式:
// connect.js 直接使用 var mysql = require('mysql'); var config = require('./config.json'); var pool = mysql.createPool(config.mysql); exports.querySQL = function(sql,callback){ pool.query(sql, function(err,rows,fields){ callback(err,rows,fields); }); }
// connect.js 使用getConnection方法 var mysql = require('mysql'); var config = require('./config.json'); var pool = mysql.createPool(config.mysql); exports.querySQL = function(sql, callback){ pool.getConnection(function(err,conn){ conn.query(sql,function(err,rows,fields){ callback(err,rows,fields); conn.release(); // 不要忘了释放 }); }); }
使用的时候,直接使用querySQL
方法便可,以下:
// db.js 查询用户信息 var connect = require('./connect.js'); exports.getUser = function(username,callback){ var sql = 'select * from user where username = "' + username + '"'; connect.querySQL(sql,function(err,rows,fields){ callback(err,rows,fields); }); };
官方是推荐使用链接池的方式进行链接的,可是,是直接使用pool.query()
链接仍是pool.getConnection()
的方法来链接,官方并无介绍其优劣,我简单作了个测试,貌似这两种方式并无多大的区别,也就没再研究,有知道的烦请告知,谢了~