【问题标题】:How to check if body in fetch POST has sent to API in react native?如何检查 fetch POST 中的正文是否已发送到反应本机的 API?
【发布时间】:2019-03-26 02:38:28
【问题描述】:

我正在构建一个反应原生应用程序并收到以下错误。我想将输入的消息、电子邮件和名称发送到 API,但在 API 中没有显示任何结果。

代码如下:

fetch('localserverusingIPaddress', {
                method: 'POST',
                  headers: {
                    "Content-Type": "application/json",
                    'Accept': 'application/json',
                  },
                body: JSON.stringify({
                    name: this.state.name,
                    email: this.state.email,
                    message: this.state.message,
                }),
            })
            .then((response)=> {console.warn(response.json())})
            //{
            //  if (response.status){
            //      return response.json();
            //  }
                // console.warn(response.json())
                // return response.json();
            //})
                //console.warn(response);
                //response.json()
                //console.warn(JSON.parse(response))})
             .then((responseData)=>{
                this.showAlert();
                console.warn(responseData);
                return responseData;
             })
            .catch((error) => {
                console.warn(error);
            });

但是,当我尝试在 iOS 中检查输入的文本时 模拟器,它显示了价值。当我使用邮递员直接将数据发布到 API 时,它也会显示值。所以我开始认为 body 未能传递给 API。

谁能告诉我为什么会发生这种情况以及如何解决这个问题?非常感谢,我已经面临这个问题好几个星期了......

【问题讨论】:

  • .then 块或 catch 块中的日志消息是什么?
  • 第一行代码中的localserverusingIPaddress 只是这里的占位符吗?运行此命令时,控制台中实际登录的内容是什么?
  • @mostafizrahman 第一个 .then 给我这个消息 {"_40":0,"_65":0,"_55":null,"_72":null} ,而第二个 .then 给我undefined 消息。 catch 块中的错误没有显示任何内容..
  • @UzairA。是的,它只是一个占位符,基本上我使用我的 IP 地址作为获取 url,而不是 localhost。

标签: react-native post ios-simulator fetch expo


【解决方案1】:

第一步是确定你的 iOS 模拟器是否真的能够向你的 localhost 发出请求。如果它无法访问您的本地网络,它必须抛出某种连接错误。但是,从您上面的评论来看,这似乎不是问题。

试试这个代码:

let url = 'localserverusingIPaddress';
let requestObject = {
    name: this.state.name,
    email: this.state.email,
    message: this.state.message
};

try {
    let response = await fetch(url, {
      method: "POST",
      headers: {
        Accept: "application/json",
        "Content-Type": "application/json"
      },
      body: JSON.stringify(requestObject)
    });

    responseJson = await response.json();
    console.log(responseJson);

  } catch (error) {
    console.error(error);    
  }

试试这个,看看记录的输出是什么。

查看请求是否实际到达您的 API 的最简单方法是从 API 端本身。您的服务器必须实现某种事件日志记录。查看当您从 Postman 发出请求时发生的情况,并将其输出与您从应用程序发出请求时发生的情况进行比较。

【讨论】:

  • 非常感谢您的回复。我尝试使用您提供的代码并收到此日志消息{"status": true, "msg": "The request has been sent"},基本上此消息与邮递员中的相同。但是,输入的文本仍然只显示一条空消息,API 根本没有值..
  • 上面的日志消息是由 API 本身发送的。所以这意味着请求已经成功到达API。我不明白你所说的the inputted text is only showing an empty message 是什么意思。你想在 React Native 应用程序中展示什么? API 收到应用程序的请求后所做的事情现在与 React Native 无关。您应该查看 API 的实现以了解发生了什么。
  • 是的,所以这个模块基本上具有将输入的消息从应用程序发送到电子邮件的功能。但是当我在电子邮件上检查它时,消息、电子邮件和名称都是空的。 . 这就是为什么我真的很困惑。
  • 所以调用了API并发送了电子邮件,但是所有的文本字符串都是空的?您可以在调用fetch() 之前执行console.log(requestObject) 以查看正在向API 发送什么请求。另外,邮递员的请求是否成功?如果是,则仔细比较两个请求以查看发生了什么。
  • 是的,正确的。我试着按照你所说的做console.log(requestObject),它给我的值与我输入的值完全相同。但是电子邮件仍然是空的,没有显示值。是的,如果我直接从 Postman 发布它也是成功的,唯一不同的是发送的电子邮件显示了这些值。
猜你喜欢
  • 2021-02-20
  • 1970-01-01
  • 2015-06-08
  • 1970-01-01
  • 2021-03-03
  • 2023-01-22
  • 2021-04-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多