今天进行连接数据库的时候,遇到这个错误,于是染念就开始debug time了。
首先,我们需要了解一下node.js里的回调函数
Node.js 异步编程的直接体现就是回调。 异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了。回调函数在完成任务后就会被调用,Node 使用了大量的回调函数,Node 所有 API 都支持回调函数。例如,我们可以一边读取文件,一边执行其他命令,在文件读取完成后,我们将文件内容作为回调函数的参数返回。这样在执行代码时就没有阻塞或等待文件I/O 操作。这就大大提高了 Node.js 的性能,可以处理大量的并发请求。
以上摘自菜鸟教程
也就是说在node.js里是异步的,就是出现在这个异步里,可以看以下的例子
app.post("/user", (req, res) => { connection.query(addSql, addSqlParams, function (err, result) { .... }); connection.end(); }
我们可以发现end()和query()在不同级里,这样就会出现一个问题。
当异步操作(query)还没有结束,数据库的连接就被关闭了。它并不根据代码的行数以及时间顺序执行。
所以你可以把end放在里面的回调函数里面,或者设置个计时器稍后关闭