javascript - 如何使用 Mysql2 Promise 结束数据库连接?
问题描述
以下代码按预期工作,但我似乎无法弄清楚如何调用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;
}
应用程序.js:
const test = require('./db.js');
test.then(console.log);
我之前尝试过添加con.end();
,return rows;
我也尝试过各种组合test.then(...).catch(...).then(() => con.end());
但没有结果。
我在这里想念什么?
解决方案
在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
随后可以在测试中关闭,但在这种情况下看起来更冗长。
推荐阅读
- google-apps-script - 以编程方式与特定用户(不是 Teamdrive 成员)共享 Teamdrive 中的文件
- netsuite - 如何将内联 HTML 列添加到套件脚本子列表?
- google-app-engine - gcloud app deploy 和 kubectl Expose 部署有什么区别?
- postgresql - 触发更新某些表而不更新主表
- ios - 使用 userDefaults 保存自定义背景颜色
- jquery - 链接依赖的 jQuery 延迟进度,失败然后
- c# - LRU缓存问题的两种解决方案:为什么一种比另一种快?
- python - 得到零python除法
- eclipse - P2 垃圾收集器不删除插件
- php - 从 URL 获取文件首先工作,但不是稍后在脚本上