node mysql关于connection的一点以为

在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 ?

阅读 4.5k
1 个回答

因为nodejs本身就是异步IO的模型,因此非常依赖回调,报错的原因就是,连接已经关闭了,才执行到回调中插入,因此,必须在回调中新建一个连接.
总之,可以搜索关键字,回调地狱(callbackhell),看看别人是如何避免回调地狱的.

const connection = mysql.createConnection(...);
connection.query('SELECT * FROM USER',insert);
connection.end();

function insert(err,row){
const connecttion=mysql.createConnetction(...);
     if (row.name === 'jack') {
        connection.query('INSERT INFO EMP ...');
     }
     
     connetction.end();
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题