React Native fetch()在控制台日志中不输出主体

时间:2019-11-09 21:11:21

标签: react-native expo

我正在使用fetch()从API获取一些数据。在Postman中进行测试时,数据会以JSON的形式成功返回。但是,当从Android上的react native应用测试时,我收到了text / html响应,不确定为什么。如何查看console.log()中文本的响应正文以进行调试?当我执行console.log(resp)时,我看不到主体。

       const response = await fetch('https://web.com/api/usersignup', {
            method: 'POST',
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json'
            }, 
            body: JSON.stringify(formData)
        })
        .then(resp => {
            this.setState({spinner: false});
            console.log(resp);// output in console is pasted under this code
             return resp.text();

            //return resp.json();
        })
        .then((responseJson) => {
         console.log(responseJson);
        })
        .catch(error => {
            this.setState({spinner: false});
            Alert.alert('Error', error.message);
            throw error;
        });

使用console.log()时,我在Metro Builder中得到的输出。不包括正文。

Response {
  "_bodyBlob": Blob {
    "_data": Object {
      "blobId": "63acc7d8-bd8a-4dd7-b33b-f0e4f202f97e",
      "offset": 0,
      "size": 0,
    },
  },
  "_bodyInit": Blob {
    "_data": Object {
      "blobId": "63acc7d8-bd8a-4dd7-b33b-f0e4f202f97e",
      "offset": 0,
      "size": 0,
    },
  },
  "headers": Headers {
    "map": Object {
      "cache-control": "public, max-age=0",
      "connection": "keep-alive",
      "content-length": "0",
      "content-type": "text/html; charset=UTF-8",
      "date": "Sat, 09 Nov 2019 21:06:05 GMT",
      "server": "Apache",
      "x-ratelimit-limit": "60",
      "x-ratelimit-remaining": "59",
    },
  },
  "ok": true,
  "status": 200,
  "statusText": undefined,
  "type": "default",
  "url": "https://web.com/api/usersignup",
}

1 个答案:

答案 0 :(得分:0)

在先完​​成诺言之后才能打印正文。

我以您的代码为例:https://snack.expo.io/@egizas/fetch-print-body

const response = await fetch('https://jsonplaceholder.typicode.com/todos/1', {
    method: 'GET',
    headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json'
    }, 
    //body: JSON.stringify(formData)
})
.then(resp => {
    console.log('Printing out not json');
    console.log(resp);
    return resp.json();
})
.then((responseJson) => {
 console.log('Printing out json'); 
 console.log(responseJson);
})
.catch(error => {
    this.setState({spinner: false});
    Alert.alert('Error', error.message);
    throw error;
});

只需替换端点并提供正确的标头即可。