node-mysql2 icon indicating copy to clipboard operation
node-mysql2 copied to clipboard

queries not timing out

Open antiochtech opened this issue 4 years ago • 2 comments

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); }

antiochtech avatar Jun 18 '21 03:06 antiochtech

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 avatar Jun 21 '21 16:06 antiochtech

@antiochtech can you test with the latest version?

testn avatar Oct 28 '21 11:10 testn