【发布时间】:2019-04-10 00:02:42
【问题描述】:
我想在执行长查询时获取连接 ID (threadId),以防前端 (Vue.js) 的用户想要取消查询(以防查询永远不会结束......)。所以当用户点击“停止查询”时,我会在 Mysql 上执行 KILL (threadId) ..
我正在使用已知 (client=mysql) 的池。我相信这是微不足道的,但请有人描述我如何访问它。我的后端 (node.js) 设置不同 - -- 是由一个聪明人制作的,他定义池和连接如下:
connection.connect(function(err) {
if (err) {
console.error('error connecting: ' + err.stack);
return;
}
console.log('connected as id ' + connection.threadId);
});
const knex = require("knex");
// Helpers -------------------------------------------------------------------
const connection = (user, password) =>
knex({
client: "mysql",
connection: {
multipleStatements: true,
host: process.env.MYSQL_IP,
port: process.env.MYSQL_PORT,
user,
password,
database: "",
dateStrings: true,
idleTimeoutMillis: -1
},
debug: true,
pool: {
min: 0,
max: 7
}
});
const knex_session = pool => (user, password) => {
if (pool[user] === undefined) {
pool[user] = connection(user, password);
}
return pool[user];
};
// Pool ----------------------------------------------------------------------
const connections = {};
// Exports -------------------------------------------------------------------
exports.admin = connection(
process.env.MYSQL_USERNAME,
process.env.MYSQL_PASSWORD
);
exports.client = knex_session(connections);
// ---------------------------------------------------------------------------
我正在寻找一种以某种方式获取 mysql threadId 的方法 - 我从函数(路由)中想象。其他选项是对 mysql 的另一个调用 (SELECT CONNECTION_ID()) 或以某种方式从请求对象中提取他的数据(但是,这里也没有成功)。 我会执行 KILL QUERY (threadId) 以确保查询不会挂起,并且我可以向用户显示正确的 vue 组件。
【问题讨论】:
标签: mysql node.js vuejs2 connection-pooling knex.js