nodemysql部分中文文档(三)

2015-07-24 11:54:00 · 作者: · 浏览: 23
ows + ' rows'); })

获得连接ID

你可以使用threadId属性获取MySQL连接ID(“thread ID”)。

connection.connect(function(err) {
  if (err) throw err;
  console.log('connected as id ' + connection.threadId);
});

多语句查询

由于安全原因,默认是关闭的.
如果要用需要这样创建连接:

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 属性就是你第几条语句出错
当发生错误时MySQL也将停止执行其余的语句。

错误处理

该模块自带了错误处理,为了写出健壮的应用,你应该仔细看。

通过本模块创建的所有错误是java script的Error对象实例
。他们有两个属性:

err.code: MySQL 错误码 (e.g.'ER_ACCESS_DENIED_ERROR'), node.js错误 (e.g. 'ECONNREFUSED') 或者内部错误 (e.g. 'PROTOCOL_CONNECTION_LOST').* err.fatal: 布尔值, 指出这个错误是否是终端连接对象。

Error: https://developer.mozilla.org/en/java script/Reference/Global_Objects/Error
MySQL server error: http://dev.mysql.com/doc/refman/5.5/en/error-messages-server.html

致命错误会挂起所有的回调。在下面的例子中,试图连接到一个无效端口时触发致命的错误。因此,错误传递到回调:

var connection = require('mysql').createConnection({
  port: 84943, // WRONG PORT
});

connection.connect(function(err) {
  console.log(err.code); // 'ECONNREFUSED'
  console.log(err.fatal); // true
});

connection.query('SELECT 1', function(err) {
  console.log(err.code); // 'ECONNREFUSED'
  console.log(err.fatal); // true
});

正常错误只返回给属于他们回调函数。所以在下面的例子中,只有第一个回调会接收错误,第二个查询的会出错:

connection.query('USE name_of_db_that_does_not_exist', function(err, rows) {
  console.log(err.code); // 'ER_BAD_DB_ERROR'
});

connection.query('SELECT 1', function(err, rows) {
  console.log(err); // null
  console.log(rows.length); // 1
});

如果一个致命的错误产生,没有一个待定的回调,或者当一个正常的错误产生而没有属于他的回调,错误会向连接对象发出error事件。下面的例子说明:

connection.on('error', function(err) {
  console.log(err.code); // 'ER_BAD_DB_ERROR'
});

connection.query('USE name_of_db_that_does_not_exist');

注:error事件在 node中很特殊。如果他们出现而没有绑定侦听器,会打印堆栈跟踪并且杀死你的进程。