Я новичок и программирую свое первое NodeJS приложение. Мое приложение использует базу данных MySQL, и поскольку мне нужен доступ к этой базе данных из нескольких файлов, я создал модуль dbdriver:
const mysql = require('mysql');
const util = require('util');
function makeDb(config) {
const connection = mysql.createConnection(config); return {
query(sql, args) {
return util.promisify(connection.query)
.call(connection, sql, args);
},
close() {
return util.promisify(connection.end).call(connection);
}
};
}
exports.makeDb = makeDb
Если я вызываю эту функцию из своего кода с запросом SQL без аргументы и обратный вызов, он отлично работает:
const db = dbdriver.makeDb(config.dbconfig);
db.query("SELECT factory_id, factory_name FROM factories WHERE factory_lastupdated < DATE_SUB(NOW(), INTERVAL 3 MINUTE) AND factory_status != 0;", function(err, result){
if(err){
logger.errorlog(err);
db.close();
}
else{
//Do some stuff with the result, not relevant here
})
(config.dbconfig - это конфигурация базы данных sql с хостом, пользователем, паролем и именем базы данных)
Однако, как только я добавляю аргументы к запросу SQL, моя функция обратного вызова, похоже, больше не выполняется. Тем не менее, я вижу в БД, что мой запрос был успешно выполнен с аргументами. Пример:
const db = dbdriver.makeDb(config.dbconfig);
db.query("DELETE from companies where company_name = ?;", ['testing'], function(err, result){
if(err){
throw(err);
}
else{
console.log(result)
}
})
console.log('test')
В результате компания, называемая 'testing', удаляется из БД, и выполняется строка console.log ('test'), но почему-то console.log (result) этого не делает.
Использование Async / Await работает, но я бы предпочел продолжать использовать обратный вызов, чтобы сохранить мой код единообразным.
Любой совет, как я могу заставить функцию обратного вызова выполняться?