Как сделать, чтобы пользователь не мог сменить emaill на существующий в базе mySQL
есть код на node js, есть форма смены профиля и нужно чтобы введенный email сранивал есть ли такой в базе данных и в случае если есть, выдавал ошибку status(400), уже готова две функции связанные с базой данных
exports.getAll = async () => {
const results = await promisify(db.query).bind(db)('SELECT * FROM users');
return results;
}
exports.getById = async (id) => {
const results = await promisify(db.query).bind(db)('SELECT * FROM users WHERE id = ?', id);
if(!results.length)
return 0;
return results[0];
}
const userEmail = parseInt(req.body.email);
const users = await this.getAll();
Как реализовать?
Ответы (2 шт):
Автор решения: Alexandr
→ Ссылка
При изменении данных сделайте запрос в БД следующего вида:
SELECT * FROM users WHERE email = ?', email
Допустим:
const results = await promisify(db.query).bind(db)('SELECT * FROM users WHERE email = ?', email);
Далее проверьте, если нашлись пользователи, тогда выкинем ошибку
if (results.length) {
// выкидываем ошибку
}
Если всё ок, то далее описывается ваша логика и сохранение новых данных...
Автор решения: Alexandr
→ Ссылка
По просьбе автора.
filter:
// допустим получили список пользователей
let users = [
{id: 1, email: "a"},
{id: 2, email: "b"},
{id: 3, email: "c"},
];
// что ищем
const candidateEmail = "b";
users = users.filter((v) => {
return v.email === candidateEmail;
});
if (users.length) {
console.error('Данный email уже занят');
} else {
console.log('Всё ок');
}
find:
// допустим получили список пользователей
let users = [
{id: 1, email: "a"},
{id: 2, email: "b"},
{id: 3, email: "c"},
];
// что ищем
const candidateEmail = "b";
const exists = users.find((v) => {
if (v.email === candidateEmail) return true;
});
if (exists) {
console.error('Данный email уже занят');
} else {
console.log('Всё ок');
}