Я довольно новичок в NodeJS и все еще пытаюсь понять, как обрабатывать ошибки. Я прочитал много вопросов, но я не понимаю, что я делаю неправильно.
Здесь у меня есть функция входа в систему:
export const login = async (req, res) => {
let body = req.body;
try {
const user = await User.findOne({ username: body.username });
if (!user) {
throw new InternalError("Username or password are wrong");
}
if (!bcrypt.compareSync(body.password, user.password)) {
throw new InternalError("Username or password are wrong");
}
let token = jwt.sign({ data: user }, "secret", {
expiresIn: 60 * 60 * 24 * 30
});
return res.json({
user: user,
token: token
});
} catch (error) {
throw new GenericError(error);
}
};
И это ошибка, которую я получаю, если, например, я ввел неправильный пароль:
(node:12332) UnhandledPromiseRejectionWarning: GenericError: Username or password are wrong
(node:12332) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by
throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch()
Я знаю, что обещания, сделанные с помощью Await, должны иметь .then()
и .catch()
, но это не ошибка при выполнении обещания, а при проверке пароля , То, что я хочу, это выбросить ошибку и получить ответ. В данный момент запрос никогда не заканчивается, и отображается предыдущая ошибка.
Спасибо!
PS: InternalError и GenericError - это только ошибки, созданные мной, которые происходят от Error