P
P
pavuuuk2019-06-26 18:35:58
Node.js
pavuuuk, 2019-06-26 18:35:58

Why is the error page not rendering?

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;
}

How to make an error page render on error?
Do not judge strictly, I'm quite a beginner. Just started learning node.js recently

Answer the question

In order to leave comments, you need to log in

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question