Имеются две функции:
exports.userCheck = async (user) => {
try {
dbUser = await exports.findByLogin(user.login);
if (!checkPassword(dbUser, user.password))
return false;
else return dbUser;
} catch (err) {
console.log("ERRORDBG: " + err);
}
}
exports.findByLogin = (login) => {
console.log(login);
sql.query(`SELECT * FROM users
WHERE login = '${login}'`, (error, result) => {
if (error) console.log("Error: " + error.stack);
console.log(result[0]);
return result[0];
});
}
Но, в консоли:
login
ERRORDBG: TypeError: Cannot read property 'password' of undefined
RowDataPacket {
id: 99,
login: 'login',
password: 'password'
}
Из-за порядка вывода данных в консоль, очевидно, что происходящее в sql.query выполняется позже checkPassword. Требуется приостанивить выполнение функции userCheck до полного завершения findByLogin.
PS sql = mysql.createConnection()
node-module mysql
UPD
Попробовал так:
let dbUser = exports.findByLogin(user.login)
.then(() => {
console.log(dbUser);
if (!checkPassword(dbUser, user.password))
return false;
else return dbUser;
})
.catch(err => console.log(err));
Но выводится: Promise { pending }
Оберните функцию запроса в БД в промис по такому принципу
exports.userCheck = async (user) => {
try {
dbUser = await exports.findByLogin(user.login);
if (!checkPassword(dbUser, user.password))
return false;
else return dbUser;
} catch (err) {
console.log("ERRORDBG: " + err);
}
}
exports.findByLogin = (login) => {
return new Promise((resolve, reject) => {
console.log(login);
sql.query(`SELECT * FROM users
WHERE login = '${login}'`, (error, result) => {
if (error) return reject(error);
resolve(result);
});
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Я пишу приложение на CordovaСам вид приложения пишу на Vue
У меня длинное меню, функция обработки выбранного пункта меню однаУ всех пунктов меню один общий класс и разные id