Nodejs和MySQL

正如我所知道的,由于非阻塞I / O理论,一切都应该在callback中。

所以我很困惑,例如felixge / node-mysql

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(); 

但我认为这是错误的例子,导致.end()可能发生在连接build立之前。

有人可以给我正确的例子来连接,查询和结束MySQL连接。

 connection.connect(function(err) { if (err) { console.error('error connecting: ' + err.stack); return; } // As I understand every "query" should happen here }); 

mysql模块内部有一个连接时处理的查询队列。 一旦.end()被调用,连接将只在队列为空时结束。

此外, .connect()是不必要的,因为在断开连接时调用.query()会隐式地触发连接。

就在你引用的代码下面:

closures连接是使用end()来完成的,它确保所有剩余的查询在发送一个退出数据包到mysql服务器之前被执行。