Как сделать, чтобы пользователь не мог сменить 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('Всё ок');
}

→ Ссылка