Node.js中JavaScript操作MySQL的常用方法整理

2020-06-17 07:27:53易采站长站整理

// Pausing the connnection is useful if your processing involves I/O
connection.pause();

processRow(row, function() {
connection.resume();
});
})
.on('end', function() {
// all rows have been received
});

十二、混合查询语句(多语句查询)
 因为混合查询容易被SQL注入攻击,默认是不允许的,可以使用var connection = mysql.createConnection({multipleStatements: true});开启该功能。
 混合查询实例:


connection.query('SELECT 1; SELECT 2', function(err, results) {
if (err) throw err;

// `results` is an array with one element for every statement in the query:
console.log(results[0]); // [{1: 1}] console.log(results[1]); // [{2: 2}] });

同样可以使用流处理混合查询结果:


var query = connection.query('SELECT 1; SELECT 2');

query
.on('fields', function(fields, index) {
// the fields for the result rows that follow
})
.on('result', function(row, index) {
// index refers to the statement this result belongs to (starts at 0)
});

如果其中一个查询语句出错,Error对象会包含err.index指示错误语句的id,整个查询也会终止。
混合查询结果的流处理方式是做实验性的,不稳定。

十三、事务处理
connection级别的简单事务处理


connection.beginTransaction(function(err) {
if (err) { throw err; }
connection.query('INSERT INTO posts SET title=?', title, function(err, result) {
if (err) {
connection.rollback(function() {
throw err;
});
}

var log = 'Post ' + result.insertId + ' added';

connection.query('INSERT INTO log SET data=?', log, function(err, result) {
if (err) {
connection.rollback(function() {
throw err;
});
}
connection.commit(function(err) {
if (err) {
connection.rollback(function() {
throw err;
});
}
console.log('success!');
});
});
});
});

十四、错误处理


err.code = string
err.fatal => boolean

PS:使用mysql模块时遇到的坑
之前写了个小程序Node News,用到了MySQL数据库,在本地测试均没神马问题。放上服务器运行一段时间后,偶然发现打开页面的时候页面一直处于等待状态,直到Nginx返回超时错误。于是上服务器检查了遍,发现程序仍然在运行,且能正确记录每次的请求,再修改代码跟踪调试,原来是在查询数据库的时候,回调一直没有被执行,程序就挂在那里了。