как получить данные ответа в выборке, если код состояния равен 400 react js

#reactjs #error-handling #fetch

#reactjs #обработка ошибок #выборка

Вопрос:

Я извлекаю данные из конечной точки api. Он принимает имя пользователя, адрес электронной почты, пароль, имя, фамилию и регистрирует его в базе данных. Теперь, если возникает какая-либо ошибка, например, уже используемая электронная почта, она выдает код состояния 400 и отправляет это

 {
    "err": "A user with the given email is already registered"
}
  

итак, я хочу использовать эту конечную точку api.
В react js я делаю это.

 const printError=(err)=>{
    if((typeof(err)=='string'))
        return err
    else if(err.err!=undefined)
        return err.err
    else if(err.message!=undefined)
        return err.message
    else
        return 'Some error occured.Try Again later.'
}
fetch(BaseUrl 'users/signup',{
        method:'post',
        credentials:'include',
        body:JSON.stringify(user),
        headers:{
            'content-type':'application/json'
        }
    })
    .then(response=>{
        console.log(response)
        if(response.ok)
            return response.json()
        else{
            throw new Error(response)
        }
    })
    .then(response=>{
        alert(response.status)
    })
    .catch(error =>  { console.log('Registration error');console.log(error); alert('Registration FailednError: ' printError(error)); });

  

Пожалуйста, скажите мне, как получить этот объект err, когда электронная почта уже принята.

Ответ №1:

Извините, что спрашиваю и сам отвечаю. Ответ на это — выбросить response.json(), если response.ok равно false .

Ответ №2:

выборка предоставляет простой флаг ok, который указывает, находится ли код состояния HTTP-ответа в диапазоне успешных или нет. Пожалуйста, обратитесь к ссылке ниже для получения более подробной информации:

https://www.tjvantoll.com/2015/09/13/fetch-and-errors/

https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch#Checking_that_the_fetch_was_successful

 .then(response=>{
        console.log(response)// this is response from server, including all ok and error responses 
        if(response.ok)
            return response.json()
        else{
            console.log(response) ///error message for server should be in this response object only
        }
    })
  

Комментарии:

1. благодаря этому флагу ok я узнал, что мой ответ не является успешным. но причина этого указана в теле ответа, так как мне получить к нему доступ. В обеих предоставленных вами ссылках нет решения этой проблемы

2. Ошибка с сервера должна быть только в ответе (выдать новую ошибку (ответ)), попробуйте что-то вроде.. response.statustext …. ответ консоли, если это не нормально, ошибка присутствует в объекте ответа…

3. В response.statustext он будет содержать неверный запрос. Но я хочу получить доступ к {err:»электронное письмо уже принято ….»}. Если это невозможно с помощью выборки, скажите мне другой способ.

4. Проверьте, отправляет ли сервер сообщение об ошибке, объект ответа должен иметь сообщение, отправленное сервером, консолью, и попытайтесь увидеть ответ и его вложенные объекты, такие как resopnse.startusText, больше информации должно быть только в ответе.