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服务器之前被执行。