NodeJS возвращает JSON, но не клиенту должным образом - PullRequest
0 голосов
/ 26 января 2019

Итак, у меня есть маршрут, который авторизует пользователя на основе ввода имени пользователя и пароля. Первая проверка, я просто не могу приступить к работе:

exports.user_login = (req, res, next) => {
    passport.authenticate('local', { session: false }, (err, user, info) => {
        if (err || !user) {
            res.status(500).json({
                errorMsg: "User could not be authenticated."
            });
        }

Если я пингую это через почтальона, я получаю соответствующий ответ JSON, что User could not be authenticated.

Тем не менее, если я использую этот маршрут из своего клиентского кода и попытаюсь console.log его или что-то еще (по сути, я хочу получить то, что есть errorMsg, зарегистрировать его в состоянии и отразить это обратно к пользователю), тогда я просто получаю следующий ответ:

axios.post("api/auth/login/", user)
            .then(res => {
                console.log(res);
                this.setState({
                    username: "",
                    password: ""
                })
                localStorage.setItem('bdgt', res.data.token);
            })
            .catch(err => {
                console.log(err);

            })

enter image description here

Я смотрел на другой код, который делал ранее, и обычно это работает, и я обычно могу получить доступ к сообщению и сохранить его в состоянии:

this.setState({
     error: err.errorMsg
})

Мысли? Чего мне не хватает?

РЕДАКТИРОВАТЬ ... Если я просто позволю этому сделать res.json({ errorMsg: "message....."}) ... это работает просто отлично, но возвращает 200, что явно не то, что я хочу.

1 Ответ

0 голосов
/ 26 января 2019

Итак, когда axios получает ответ, статус которого больше или равен 400, возникает исключение.Вы можете получить доступ к своим данным ответа, как это

axios.post("api/auth/login/", user)
            .then(res => {
                console.log(res);
                this.setState({
                    username: "",
                    password: ""
                })
                localStorage.setItem('bdgt', res.data.token);
            })
            .catch(err => {
                console.log(err.response.data); // this is your JSON

            })
...