#javascript #sql #node.js
Вопрос:
У меня есть веб-формуляр, из которого я извлекаю данные. Уникальным полем должно быть электронное письмо, но если я повторю электронное письмо, мой формуляр прерывается и выдает ошибку, я не знаю, как остановить разрыв моего формуляра, я просто хочу ошибку.нажмите(«повторно введите свой адрес электронной почты»), чтобы снова подключиться к бд с помощью npm start. Я ищу подтверждение или что-то в этом роде, я новичок в node.js и работа с js
connection.query( "SELECT * FROM `employees` WHERE `email`= ?", [employee.email], function (err, row) { if (err) throw err; else { if (row amp;amp; row.length) { error.push("Email already exists!"); //this does nothing return console.log("Email is existing already!"); } } } ); if(error.length === 0){ // insert data in the table } else { res.status(400).send(error); console.log("Error"); }
Я хочу, чтобы error.push(«Электронная почта уже существует!»); чтобы изменить мой массив ошибок, чтобы он не входил в первый if(error.length === 0)
Комментарии:
1. Отметьте эту строку: вернуть console.log(«Электронная почта уже существует!»); Вы возвращаете console.log, вам следует удалить инструкцию о возврате.
Ответ №1:
connection.query
является асинхронной функцией. Так error.push
бывает после вашего if
.
Возможные решения —
- Переместите следующий код в функцию обратного вызова
- Создайте обещание и разрешите его в функции, иначе говоря, используйте
async/await
систему. Пример функции:
const executeQuery = (con, query, params = null) =gt; { return new Promise((resolve, reject) =gt; { con.query(query, params, (err, res) =gt; { if (err) { reject(err); return } resolve(res); }); }) };
Вы можете запустить это, а можете сказать await executeQuery(con,query,param)
и продолжить оттуда.