如何使用Mysql2 Promise终止数据库连接?

时间:2019-08-30 20:32:07

标签: javascript mysql node.js

以下代码按预期工作,但我似乎无法弄清楚如何调用con.end();

db.js:

const
mysql = require('mysql2/promise'),
config = {
  host: 'localhost',
  port: 3306,
  user: 'root',
  password: '',
  database: 'webhooks'
};

module.exports = async () => {
  const
  con = await mysql.createConnection(config),
  sql = 'SELECT * FROM table',
  data = [];

  let [rows, fields] = await con.execute(sql);

  return rows;
}

app.js:

const test = require('./db.js');

test.then(console.log);

我尝试在con.end();之前添加return rows;,也尝试了test.then(...).catch(...).then(() => con.end());的各种组合,但没有结果。

我在这里想念什么?

1 个答案:

答案 0 :(得分:1)

async 导出函数中,因为正在等待所有异步操作(连接,提取)。理想情况下,con.end()应该是async操作,并且可以在刚刚获取和解决结果之前等待它。

module.exports = async () => {
  const
  con = await mysql.createConnection(config),
  sql = 'SELECT * FROM table',
  data = [];

  let [rows, fields] = await con.execute(sql);
  await con.end();
  return rows;
}

然后在 app.js 中获取返回的行:

const test = require('./db.js');

test.then(rowsResults => console.log(rowsResults)); //only rows were returned
  • con对象也可以与returned promise一起作为rows的一部分发送,随后可以在进行测试时关闭,但是在这种情况下看起来很冗长。