1. 安装mysql
2. 安装node.js driver for mysql
npm install mysql
※注意点:安装前先把目录cd到node.exe所在目录下,这样执行安装命令时,会找到目录下node_modules,并安装在此目录下。
3. 与mysql交互
- 建立数据库连接:createConnection(Object)方法
该方法接受一个对象作为参数,该对象有四个常用的属性host,user,password,database。与php中链接数据库的参数相同。
- CRUD
var mysql = require('mysql');
// 创建一个connection
var connection = mysql.createConnection({
host : 'localhost',
user : 'root',
password : 'root',
port : '3306',
database : 'nodesample'
});
connection.connect(function(err) {
if (err) {
console.log('[query] - :' + err);
return;
}
console.log('[connection connect] succeed!\n\n');
});
var userAddSql = 'INSERT INTO userinfo(UserName,UserPass) VALUES(?,?)';
var userAddSql_Params = ['Betty', '123456'];
// INSERT
connection.query(userAddSql, userAddSql_Params, function(err, result) {
if(err) {
console.log('[INSERT ERROR] - ', err.message);
return;
}
console.log('--------------------------INSERT--------------------------');
// console.log('INSERT ID:', result);
console.log('INSERT affectedRows:', result.affectedRows);
console.log('----------------------------------------------------------\n\n');
});
var userModSql = 'UPDATE userinfo SET UserPass = ? WHERE UserName = ?';
var userModSql_Params = ['111111', 'Betty'];
// UPDATE
connection.query(userModSql,userModSql_Params,function (err, result) {
if(err){
console.log('[UPDATE ERROR] - ',err.message);
return;
}
console.log('--------------------------UPDATE----------------------------');
console.log('UPDATE affectedRows',result.affectedRows);
console.log('------------------------------------------------------------\n\n');
});
var userGetSql = 'SELECT * FROM userinfo WHERE UserName = ?';
var userGetSql_Param = ['Betty'];
// SELECT
connection.query(userGetSql, userGetSql_Param, function (err, result) {
if(err){
console.log('[SELECT ERROR] - ',err.message);
return;
}
console.log('--------------------------SELECT----------------------------');
console.log(result);
console.log('------------------------------------------------------------\n\n');
});
var userDelSql = 'DELETE FROM userinfo WHERE UserName = ?';
var userDelSql_Param = ['Betty'];
// DELETE
connection.query(userDelSql, userDelSql_Param, function (err, result) {
if(err){
console.log('[DELETE ERROR] - ',err.message);
return;
}
console.log('--------------------------DELETE----------------------------');
console.log('DELETE affectedRows',result.affectedRows);
console.log('------------------------------------------------------------\n\n');
});
connection.end();
- 结束数据库连接end()和destroy()
end()接受一个回调函数,并且会在query结束之后才触发,如果query出错,仍然会终止链接,错误会传递到回调函数中处理。
destroy()立即终止数据库连接,即使还有query没有完成,之后的回调函数也不会在触发。
- 创建连接池 createPool(Object) Object和createConnection参数相同。
connection.release()释放链接到连接池。如果需要关闭连接并且删除,需要使用connection.destroy()。
- 处理服务器连接断开
var mysql = require('mysql');
var db_config = {
host : 'localhost',
user : 'root',
password : 'root',
port: '3306',
database: 'nodesample'
};
var connection;
function handleDisConnect() {
connection = mysql.createConnection(db_config);
connection.connect(function(err) {
if(err) {
console.log("进行断线重连:" + new Date());
setTimeout(handleDisConnect, 2000); //2秒重连一次
return;
}
console.log("连接成功");
});
connection.on('error', function(err) {
console.log('db error', err);
if(err.code == 'PROTOCOL_CONNECTION_LOST') {
handleDisConnect();
} else if (err.code == 'ECONNRESET'){
handleDisConnect();
} else {
throw err;
}
});
}
handleDisConnect();
更多详细内容请参照:https://github.com/mysqljs/mysql