node mysql模块返回insertid为0解决方法

12/31/2021 node

在用nodejs向MySQL插入数据的时候,获取返回值发现insertid一直是0,然后再获取的时候会获得比最新小1的值,比如说最新插入的值为1122,获取的id就是1121。

后来发现是因为获取id的时候,没有等待query执行完成就获取id了,而我们应该等待query执行完成后再获取id,这样才能获取到当前id。

但是当时给query加上await了,为什么不会执行呢?

因为query不支持异步操作,所以要重写query函数。

创建一个Promise然后将query放在里面进行执行,就可以了。

async function query(query,params){
  return new Promise((resolve,reject)=>{
    db.query(query,params,(err,results)=>{
      if(err){
        reject(err.message)
      } else {
        resolve(results.insertId);
      }
    })
  });
}
1
2
3
4
5
6
7
8
9
10
11