#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/
.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, больше информации должно быть только в ответе.