React native 使用apollo链接rest发送纯文本请求正文

React native 使用apollo链接rest发送纯文本请求正文,react-native,graphql,apollo,react-apollo,apollo-link-rest,React Native,Graphql,Apollo,React Apollo,Apollo Link Rest,我正在尝试向端点发送POST请求,该端点使用应用程序/x-www-form-urlencoded内容类型,并使用apollo link rest模块获取表单数据的纯文本字符串,这是我遇到的最困难的时刻 在cURL表单中,我要发出的请求如下所示: curl -X POST http://tld.com/search -d include_all=My%20Search%20Term 我已经像这样将我的主要组件包装在react apollo中的graphqlHOC中 export default

我正在尝试向端点发送POST请求,该端点使用
应用程序/x-www-form-urlencoded
内容类型
,并使用
apollo link rest
模块获取表单数据的纯文本字符串,这是我遇到的最困难的时刻

在cURL表单中,我要发出的请求如下所示:

curl -X POST http://tld.com/search -d include_all=My%20Search%20Term
我已经像这样将我的主要组件包装在
react apollo
中的
graphql
HOC中

export default graphql(gql`
  mutation productSearch($input: string) {
    search(input: $input) @rest(
      path: "/search",
      method: "post",
      endpoint: "search",
      bodySerializer: "search"
    ) {
      total
    }
  }
`,
{
  props: ({ mutate }) => ({
    runSearch: (text: string) => {
      if (mutate) {
        mutate({
          variables: {
            input: `include_all=${encodeURIComponent(text)}`,
          },
        });
      }
    },
  }),
})(SearchResults);
const searchSerializer = (data: any, headers: Headers) => {
  headers.set('Content-Type', 'application/x-www-form-urlencoded');
  return { body: data, headers };
};
查询中引用的搜索
bodySerializer
如下所示

export default graphql(gql`
  mutation productSearch($input: string) {
    search(input: $input) @rest(
      path: "/search",
      method: "post",
      endpoint: "search",
      bodySerializer: "search"
    ) {
      total
    }
  }
`,
{
  props: ({ mutate }) => ({
    runSearch: (text: string) => {
      if (mutate) {
        mutate({
          variables: {
            input: `include_all=${encodeURIComponent(text)}`,
          },
        });
      }
    },
  }),
})(SearchResults);
const searchSerializer = (data: any, headers: Headers) => {
  headers.set('Content-Type', 'application/x-www-form-urlencoded');
  return { body: data, headers };
};
然后在我的组件中像这样调用
runSearch
函数

async componentDidMount() {
  try {
    const result = await this.props.runSearch(this.props.searchText);
  } catch (error) {
    // report error & show message
  }
}
现在我意识到我没有对结果做任何事情,但在运行搜索代码时,似乎有一个未处理的承诺拒绝(React Native用一个黄色框警告告诉我)。我也在用Reactotron检查请求,请求看起来不错,但仍然失败。我想知道我在配置apollo link rest时是否遗漏了什么,或者是否有更好的方法可以检查apollo客户端发出的请求


这里的任何帮助都将不胜感激。谢谢

所以我把上面的一切都设置好了。这不是阿波罗的问题,而是我的Info.plist文件的问题。我没有启用iOS应用程序发出HTTP请求的功能。它只允许HTTPS。我用Info.plist中的这个条目修复了它

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>
NSAppTransportSecurity
NSAllowsArbitraryLoads