* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 100 * * происходит потому, что вы не обрабатываете отклонение Обещания, то есть отсутствует обработчик .catch
.
bcrypt.compare(password, user.passowrd).then(isMatch => {
if (isMatch) {
res.json({ msg: "Success" });
} else {
return res.status(400).json({ password: "Password incorrect" });
}
})
.catch(err => {
res.status(500).send('Internal server error');
});
В данном конкретном случае кажется, что password
& user.passowrd
равны undefined
. Последнее вероятно из-за опечатки: passowrd
=> password
.
Поэтому рекомендуется проверять правильность аргументов, отправляемых на ваш маршрут.
router.post("/login", (req, res) => {
const email = req.body.email;
const password = req.body.passowrd;
if(!email || !password)
return res.status(400).send('email & password are required');
/* ... */
});
Поскольку у вас отсутствует обработчик .catch
также в .findOne
Promise
, всегда лучше объединять в цепочку обещания, а не вкладывать их, как вы делаете. Итак, вот полный код:
router.post("/login", (req, res) => {
const email = req.body.email;
const password = req.body.passowrd;
if (!email || !password)
return res.status(400).send('email & password are required');
User.findOne({ email })
.then(user => {
if (!user) {
return res.status(404)
.json({ message: "User not found" });
}
return bcrypt.compare(password, user.passowrd);
})
.then(isMatch => {
if (typeof isMatch !== 'boolean')
return; // result from `res.status(404)...`
if (isMatch)
return res.json({ message: "Success" });
return res.status(400)
.json({ message: "Password incorrect" });
})
.catch(err => {
res.status(500).json({ message: 'Internal server error' });
});
});
Я пытался добавить .catch (err => console.log (err)); а также
.catch (console.log («Что-то пошло не так.»)); до конца обоих
.findOne (). then () и .compare (). then (), но это не помогло.
Либо вы неправильно подключили обработчик, либо предупреждение было сгенерировано в другом коде. Но так как в указанном коде нет .catch
, который вы упомянули, я не могу подтвердить. В любом случае приведенный фрагмент не вызовет UnhandledPromiseRejectionWarning