Reactjs 如果状态代码为400,如何在fetch中获取响应数据

Reactjs 如果状态代码为400,如何在fetch中获取响应数据,reactjs,error-handling,fetch,Reactjs,Error Handling,Fetch,我正在从api端点获取数据。 它接受用户名、电子邮件、密码、firstname、lastname并将其注册到数据库中。 现在,如果出现一些错误,如电子邮件已被使用,那么它会给出400状态码并发送此消息 { "err": "A user with the given email is already registered" } 所以我想使用这个api端点。 实际上,我正在这样做 const printError=(err)=>{ if

我正在从api端点获取数据。 它接受用户名、电子邮件、密码、firstname、lastname并将其注册到数据库中。 现在,如果出现一些错误,如电子邮件已被使用,那么它会给出400状态码并发送此消息

{
    "err": "A user with the given email is already registered"
}
所以我想使用这个api端点。 实际上,我正在这样做

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 Failed\nError: '+printError(error)); });


请告诉我如何在已接收电子邮件时获取此err对象。

fetch提供了一个简单的ok标志,指示HTTP响应的状态代码是否在成功范围内。有关更多详细信息,请参阅以下链接:


很抱歉我自己问了又说了答案。
如果response.ok为false,则答案为throw response.json()。

通过此ok标志,我知道我的响应未成功。但原因在响应正文中给出,因此我如何访问它。在您提供的两个链接中,都没有包含解决方案,即来自服务器的错误应仅在响应中(抛出新错误(响应)),尝试类似于..response.statustext….console response的操作如果它不正常,则响应对象中存在错误…response.statustext它将包含错误的请求。但我想访问{err:“电子邮件已被接收…”。如果无法通过fetch执行此操作,请告诉我其他方法。检查服务器是否正在发送错误消息,响应对象应具有由服务器、控制台发送的消息,并尝试查看响应及其嵌套对象,如resopnse.startusText,响应中应仅包含更多信息。
.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
        }
    })