今天进行连接数据库的时候,遇到这个错误,于是染念就开始 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 放在里面的回调函数里面,或者设置个计时器稍后关闭