我正在尝试向一个端点发送POST请求,该端点使用apollo-link-rest模块获取表单数据的application/x-www-form-urlencoded Content-Type和纯文本字符串,这是最困难的。
在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);查询中引用的搜索bodySerializer如下所示。
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
}
}现在我意识到我没有对结果做任何事情,但在运行搜索代码时,似乎有一个未处理的promise rejection (这是React Native通过一个黄色框警告告诉我的)。我也在用Reactotron检查请求,请求看起来不错,但还是失败了。我想知道我是不是在配置apollo-link-rest时遗漏了什么,或者有没有更好的方法来检查来自Apollo客户端的请求。
这里的任何帮助都将不胜感激。谢谢!
发布于 2018-08-17 00:35:23
因此,事实证明我上面的所有设置都是正确的。这不是react-apollo的问题,而是我的Info.plist文件的问题。我没有启用iOS应用程序发出超文本传输协议请求的功能。它只允许HTTPS。我在我的Info.plist中用这个条目修复了它。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>https://stackoverflow.com/questions/51864539
复制相似问题