本文介紹了如何在請求時(shí)獲取有關(guān)連接ID的信息?的處理方法,對大家解決問題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!
問題描述
我希望在執(zhí)行長查詢時(shí)獲得連接ID(ThreadID),以防前端(Vue.js)的用戶想要取消查詢(以防查詢永遠(yuǎn)不結(jié)束…)。因此,當(dāng)用戶點(diǎn)擊”停止查詢”時(shí),我將對MySQL..
執(zhí)行KILL(ThreadID)
我正在與KNOW(CLIENT=MySQL)一起使用池化。我相信這是一件微不足道的事情,但可以請某人描述一下我如何訪問它。我的后端(node.js)的設(shè)置不同-是由一個(gè)聰明人創(chuàng)建的,他定義池和連接如下:
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線程ID的方法–我想是從函數(shù)(路由)獲得的。其他選項(xiàng)是對MySQL的其他調(diào)用(SELECT CONNECTION_ID()),或者通過某種方式從請求對象中提取數(shù)據(jù)(然而,在這里也不成功)。
然后執(zhí)行KILL QUERY(ThreadID)以確保查詢不會掛起,并確保我可以向用戶顯示正確的VUE組件。
推薦答案
正如您已經(jīng)發(fā)現(xiàn)的,MySQL connection id是Connection對象的屬性:connection.threadId
。knex也是如此,因?yàn)樗挥趍ysql之上。
只要它在作用域中,您就可以從Connection對象中獲取它,并將其放在一個(gè)有用的位置……如果你是快遞的話就是這樣的。
function whatever (req, res, next) {
...
res.dbmsThreadId = connection.threadId
...
}
這篇關(guān)于如何在請求時(shí)獲取有關(guān)連接ID的信息?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,