Как использовать .метод поиска для пользователей из БД

#javascript #node.js #mongodb #express #authentication

#javascript #node.js #mongodb #экспресс #аутентификация

Вопрос:

Я пытаюсь создать систему аутентификации пользователя и застрял при проверке пользователя, главным образом потому, что я не понимаю, как я могу просмотреть ВСЕХ СВОИХ ПОЛЬЗОВАТЕЛЕЙ, чтобы отфильтровать (.find) имена пользователей и сравнить их с именем пользователя, с которым я пытаюсь войти.

Эта строка кода создает ошибку, она не видит значения (всех пользователей, которых я сохранил) в Users:

 const usernameCheck = Users.find(x => x.username = req.body.username);
 

Код для проверки пользователя:

 router.route('/login').post(async (req, res) => {
    const usernameCheck = Users.find(x => x.username = req.body.username);
    if (usernameCheck === null) {
        return res.status(400).send('Cannot find user');
    } 
    try {
       if (await bcrypt.compare(req.body.password, usernameCheck.password)){
           res.send('Success')
       } else {
           res.send('Not allowed!')
       }
    } catch {
        res.status(500).send()
    }
});
 

Я создаю новых пользователей в «Пользователях» таким образом, в соответствии с созданной мной схемой mongoose:

 router.route('/add').post(async (req, res) => {
    try {
        const hashedPassword = await bcrypt.hash(req.body.password, 10); // 10 is const salt = await bcrypt.genSalt/*10 is default*/);
        const email = req.body.email;
        const username = req.body.username;
        const password = hashedPassword;
        const IP = req.connection.remoteAddress;

        const newUser = new Users({
            email,
            username,
            password,
            IP
        });
        newUser.save()
            .then(() => res.json('User added!'))
            .catch(err => res.status(400).json('Error: '   err));
    } catch {
        res.status(500).send()
    }
   
});
 

Итак, как я могу просмотреть всех моих созданных пользователей, используя метод .find?

Комментарии:

1. я думаю, что его проверка на равенство и здесь == не должно быть = ryt const usernameCheck = Users.find(x => x.username = req.body.username);

2. Я получаю эту ошибку «TypeError: не удается прочитать свойство ‘username’ из null», поэтому не должно быть проблем с =

3. может быть, но все же это станет назначением…

Ответ №1:

Я не знаком с вашим синтаксисом, я обычно делаю что-то вроде этого:

 Users.findOne({username: req.body.username}, 'username', (err, result) => {
    if(err) {
        throw err
    }
    if(!result) {
        return res.status(400).send('Cannot find user');
    }
    // your verification
}
 

Комментарии:

1. Под «именем пользователя» вы подразумеваете те имена пользователей, которые я сохранил в БД?

2. ‘username’ — это имя вашего столбца