了解node-mariasql示例代码

时间:2014-10-13 22:37:17

标签: node.js mariadb

我在node-mariasql库上看到以下代码 -

var inspect = require('util').inspect;
var Client = require('mariasql');

var c = new Client();
c.connect({
  host: '127.0.0.1',
  user: 'foo',
  password: 'bar',
  db: 'mydb'
});

c.on('connect', function() {
   console.log('Client connected');
 })
 .on('error', function(err) {
   console.log('Client error: ' + err);
 })
 .on('close', function(hadError) {
   console.log('Client closed');
 });

var pq = c.prepare('SELECT * FROM users WHERE id = :id AND name = :name');

c.query(pq({ id: 1337, name: 'Frylock' }))
 .on('result', function(res) {
   res.on('row', function(row) {
     console.log('Result row: ' + inspect(row));
   })
   .on('error', function(err) {
     console.log('Result error: ' + inspect(err));
   })
   .on('end', function(info) {
     console.log('Result finished successfully');
   });
 })
 .on('end', function() {
   console.log('Done with all results');
 });

c.end();

此输出已指定为 -

/* output:
    Client connected
    Query #1 row: [ 'first query' ]
    Query #1 finished successfully
    Query #2 was aborted
    Query #3 row: [ 'third query' ]
    Query #3 finished successfully
    Done with all queries
    Client closed
 */

对我而言,c.connect看起来是异步调用。那么代码的底部是不是应该放在c.on(' connect')回调中?否则,当我c.queryc.prepare

时,保证连接已经打开的保证是什么

代码的底部

var pq = c.prepare('SELECT * FROM users WHERE id = :id AND name = :name');

c.query(pq({
    id: 1337,
    name: 'Frylock'
}))
    .on('result', function (res) {
    res.on('row', function (row) {
        console.log('Result row: ' + inspect(row));
    })
        .on('error', function (err) {
        console.log('Result error: ' + inspect(err));
    })
        .on('end', function (info) {
        console.log('Result finished successfully');
    });
})
    .on('end', function () {
    console.log('Done with all results');
});

c.end();

1 个答案:

答案 0 :(得分:1)

mysql协议要求您在发送下一个命令之前等待上一个命令完成,因此大多数客户端会自动拥有某种internal queuemove to next command in the queue。例如,此代码不会并行执行3个查询:

c.query('select sleep(1)');
c.query('select sleep(2)');
c.query('select 1', console.log);

相反,它会在3秒后输出“选择1”结果。因此,“连接已经打开的保证是什么”的答案是“客户端设计保证了这一点”