node-mysql2
node-mysql2 copied to clipboard
queries not timing out
with a 1ms timeout and the db being on the other side of an ssh tunnel thousands of miles away, shouldnt this result in an error in renderer.js?
main.js
const mysql = require("mysql2/promise");
const bluebird = require("bluebird");
const getPort = require("get-port");
var connection = {};
const sqlConf = {
host: "localhost",
user: process.env.DB_USER,
password: process.env.DB_PASS,
database: process.env.DB_DATABASE,
dateStrings: "date",
Promise: bluebird,
enableKeepAlive: true
};
async function startup() {
await ssh.connect(sshConf);
}
ssh.on("ready", async function() {
ssh.forwardOut("127.0.0.1", await getPort({port: getPort.makeRange(49152, 65535)}), "127.0.0.1", 3306, async function(err, stream) {
if (err) throw err;
sqlConf.stream = stream;
try {
connection = await mysql.createConnection(sqlConf);
} catch (error) {
console.log(error);
}
});
});
ipcMain.handle("query", async (event, sql, placeholder) => {
try { return await connection.query({ sql: sql, values: placeholder, timeout: 1 });
} catch (error) { console.log(error); }
});
renderer.js
try { var [rows, fields] = await ipcRenderer.invoke("query", "SELECT * FROM qryCourses;");
} catch (error) { alert(error); }
or if this makes it any easier...
renderer.js:
var util = require("util");
var mysql = require("mysql2/promise");
var bluebird = require("bluebird");
var sqlConf = {
host : "localhost",
user : process.env.DB_USER,
password : process.env.DB_PASS,
database : process.env.DB_DATABASE,
dateStrings : "date",
Promise : bluebird,
enableKeepAlive : true,
typeCast : function castField(field, useDefaultTypeCasting) {
if ((field.type === "BIT") && (field.length === 1)) {
var bytes = field.buffer();
return(bytes[0] === 1);
}
return(useDefaultTypeCasting());
}
};
document.addEventListener("DOMContentLoaded", async function () {
var connection = await mysql.createConnection(sqlConf);
try {
var [rows, fields] = await connection.query({ sql: "SELECT * FROM table;", timeout: 1 });
console.log(util.inspect(rows));
} catch (error) { console.log(error); }
});
output:
"[
TextRow { column1: 1, column2: 'foo' },
TextRow { column1: 2, column2: 'bar' },
TextRow { column1: 3, column2: 'snafu' }
]"
@antiochtech can you test with the latest version?