Статус сервера 400 блокирует JSON от отправки ответа клиенту - PullRequest
0 голосов
/ 21 сентября 2019

Я сейчас разрабатываю клиентскую часть для своего приложения.Когда я пытаюсь войти в систему в случае, если адрес электронной почты и пароль верны, все работает нормально, но отправка данных об ошибках не происходит, потому что status(400) блокирует его.

Вот часть моего серверного кода для входа пользователя, которыйне отправляет объект с isAuth, message, err:

User.findOne({ email: req.body.email }, (err, user) => {
        if (!user) return res.status(400).json({
            isAuth: false,
            message: "Auth failed, bad email",
            err
        })

Но когда я делаю так, я получаю ошибку со всеми параметрами:

User.findOne({ email: req.body.email }, (err, user) => {
        if (!user) return res.json({
            isAuth: false,
            message: "Auth failed, bad email",
            err
        })

Еще одна странная вещьчто когда я отправляю неверный запрос Почтальону, я получаю все данные ответа.

А вот функция на стороне клиента, которая делает запрос, часть console.log(request) блокируется из-за состояния 400:

    const submitForm = async (e) => {
        e.preventDefault()
        const request = await axios.post('/api/login', { email: email, password: password }).then(res => res.data)
        console.log(request)

        dispatch({
            type: "USER_LOGIN",
            payload: request
        })
    }

А вот некоторые вещи Chrome из консоли:

xhr.js:166 POST http://localhost:3000/api/login 400 (Bad Request)
createError.js:17 Uncaught (in promise) Error: Request failed with status code 400
    at createError (createError.js:17)
    at settle (settle.js:19)
    at XMLHttpRequest.handleLoad (xhr.js:60)

1 Ответ

0 голосов
/ 21 сентября 2019

Произошла ошибка / ошибка axios.

Я переписал свой код, используя fetch API.Кажется, что у axios есть какая-то ошибка, когда дело доходит до обработки состояний 4xx и 5xx.

Теперь клиентская часть выглядит так:

const submitForm = async (e) => {
        e.preventDefault()

        const request = await fetch('/api/login', {
            method: 'POST',
            body: JSON.stringify({ email, password }),
            headers: {
                'Content-Type': 'application/json',
            }
        }).then(res => res.json())

        console.log(request)

        dispatch({
            type: "USER_LOGIN",
            payload: request
        })
    }

На стороне сервера все так же, как онодолжно быть, return res.status(400).send(data)

...