在node里面,正常调用mysql应该是这样的:
const connection = mysql.createConnection(...);
connection.query('SELECT * FROM USER', () => {});
connection.end();
假设我在select之后想继续操作数据库,这时候应该怎么管理connection?比如:
const connection = mysql.createConnection(...);
connection.query('SELECT * FROM USER', (err, row) => {
if (row.name === 'jack') {
connection.query('INSERT INFO EMP ...');
}
});
connection.end();
这样的话就会提示一个错误:
Cannot enqueue Query after invoking quit
原因应该是我们在第一个查询回到的时候连接已经关闭了,再次去调用query就有问题了。
所以遇到这种情况应该如何去管理connection,是在回调里面去 connection.end(),还是回调的时候重新去创建新的 connection ?
因为nodejs本身就是异步IO的模型,因此非常依赖回调,报错的原因就是,连接已经关闭了,才执行到回调中插入,因此,必须在回调中新建一个连接.
总之,可以搜索关键字,回调地狱(callbackhell),看看别人是如何避免回调地狱的.