Задать вопрос
@pavuuuk

Почему не рендерится страница с ошибкой?

exports.post = function(req, res, next) {

    const username = req.body.login;
    const password = req.body.password;
    
    const findUser = async () => {
        return User.findOne({username});
    }

    const checkUser = async (user) => {
        
        if (user) {
            if (user.checkPassword(password)) {
                return user;
            } else {
                throw createError(403, "Password is incorrect");
            }
        } else {
            
            const user = new User({username, password}); // Вход и регистрация у меня совмещены
            
            user.save((err) => {
                if (err) {
                    throw err;
                }
            });

            return user;

        }
    }

    (async () => {
        try {

            const result = await findUser();
            await checkUser(result) // Специально делаю ошибку в пароле
            
            await res.send("Done"); // На клиенте проверяется, если "Done", то загружается страница, но сейчас возникает 
                                                 // ошибка, и поэтому клиент не получает ответа
        } catch (err) {
            
            next(err); // Ошибка отправляется в app.use()
        
        }
    })();

}


app.use("/", indexRouter);

app.use((err, req, res, next) => {
	next(err);
});

app.use((err, req, res, next) => {
	res.locals.error = err;

	res.status(err.status || 500); // доходит до сюда

	res.render("error"); // Страница не рендерится, вместо этого выдаёт POST /login 403
});


form.onsubmit = function() {
    const login = this.elements.userName.value;
    const password = this.elements.password.value;

    const data = {login, password}

    fetch("/login", {method: "POST", body: JSON.stringify(data), headers: {"Content-type": "application/json"}})
        .then(res => res.text())
        .then(text => {
            if (text === "Done") {
                window.location.href = "/";
            }
        })
        .catch(err => console.error(err));

    this.elements.userName.value = "";
    this.elements.password.value = "";
    
    return false;
}


Как сделать, чтобы при ошибки рендерилась страница с ошибкой?
Не судите строго, я совсем новичок. Недавно только начал изучать node.js
  • Вопрос задан
  • 78 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы