.catch () в ответной реакции - PullRequest
       7

.catch () в ответной реакции

0 голосов
/ 07 сентября 2018

Это мой код для регистрации

handleSignUp(){
    console.log('Clicked')
    fetch('http://laptopIp:9999/signUp',{
        method:'POST',
        headers:{
            Accept:'application/json',
            'Content-Type':'application/json',
        },
            body:JSON.stringify(this.state),
    })
    .then((res)=>{
        console.log("here")
        console.log(res)
        this.setState({error:false})
    }).catch((e)=>{
        console.log(e)
        console.log("in error")             
    })

это экспресс-сервер, обрабатывающий реквизит

router.post('/signUp',function(reqs,resp){


MongoClient.connect(url,{ useNewUrlParser: true },function(err,database){
    if(err){
        console.log(err)
    }else{

        var dataBases = database.db("thaparApp")

        dataBases.collection('userLogin').find({'email':reqs.body.email}).toArray(function(err,result){
            if(err){
                console.log(err)
            }else if(result[0]){
                resp.status(403).send({"error":"email is taken"})
            }else{
                if(validateEmail(reqs.body.email)){
                    dataBases.collection('userLogin').insertOne(reqs.body)
                    resp.send()
                }else{
                    resp.status(403).send({"error":"Email is not correct"})
                }
            }
        })

    }
})

}) }

То, что я делаю, это отправка того же имени пользователя из Reaction-native, а Express отправляет мне ошибку 403 , но React native не обрабатывает эту ошибку в .catch (), а сохраняет ее в .then ()

enter image description here как мы можем видеть на изображении, этот код состояния - 403, что является ошибкой, и .catch() имеет console.log ("in error"), который не получает печать.

1 Ответ

0 голосов
/ 07 сентября 2018

Звонок поступает с сервера, хотя его состояние не соответствует ожидаемому, это не ошибка для перехвата.

Попробуйте использовать ok fetch для проверки правильности ответа, например:

.then(function(response) {
    if (!response.ok) {
        //throw error
    } else {
       //valid response
    }
})

Вы также можете получить доступ к статусу ответа, например:

response.status;

или также текст состояния, такой как:

response.statusText;

оформить заказ ниже:

https://developer.mozilla.org/en-US/docs/Web/API/Response/statusText

https://developer.mozilla.org/en-US/docs/Web/API/Response/status

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

...