为什么即使登录失败,本机提取总是返回200?

时间:2017-07-14 03:29:07

标签: reactjs react-native postman fetch-api

我使用这些代码将数据发布到登录

postJson(url, data, callback){
        var fetchOptions = {
          method: 'POST',
          headers: {
            'Accept': 'application/json',
            'Content-Type': 'application/json',
          },
          body:data
        };
        console.log('begin request');
        fetch(url, fetchOptions)
        .then((response) => {
          responseJson = response.json()
          console.log(responseJson, response.status)
          callback(responseJson)
        })
        .catch((error) => {
          console.error(error);
        });
  }

但是当我用它作为

时很奇怪
postJson(url, formData, (responseJson) => {
           if (responseJson == 200){
              console.log(responseText)
              this.onLoginSuccess();
           }
           else{
              alert('fail');
           }
    })

响应代码始终为200,但登录失败。我用邮递员测试了api,它运行正常。enter image description here

实际上console.log(responseJson,response.status)得到的是

Promise {
  "_40": 0,
  "_55": null,
  "_65": 0,
  "_72": null,
} 200

更新:此问题是由服务器端的基本身份验证引起的。只需添加编码即可解决此问题。感谢

2 个答案:

答案 0 :(得分:2)

就像你的console.log输出所暗示的那样。 response.json返回应该解决的承诺。您应该链接另一个.then以解决承诺。

供参考https://developer.mozilla.org/en-US/docs/Web/API/Body/json

E.g:

...
.then((response) => response.json())
.then(json => callback(json))

希望它有所帮助。

答案 1 :(得分:1)

您正在将JSON与整数进行比较,因为您将在此处将其发送到回调:

responseJson = response.json()
console.log(responseJson, response.status)
callback(responseJson) //sending JSON not response.status

你需要这样的东西:

callback(responseJson,response.status)

并在您的通话功能中:

postJson(url, formData, (responseJson, status) => {
           if (status== 200){
              console.log(responseJson)
              this.onLoginSuccess();
           }
           else{
              alert('fail');
           }
    })