所有GraphQL标量都以字符串形式出现(Apollo)

时间:2017-09-03 07:58:34

标签: ios swift graphql apollo apollo-client

我正在使用Apollo客户端进行GraphQL客户端集成。我添加了以下运行脚本,这在官方文档中有建议。

cd "${SRCROOT}/${TARGET_NAME}/GraphQL/Open"
$APOLLO_FRAMEWORK_PATH/check-and-run-apollo-codegen.sh generate $(find 
. -name '*.graphql') --schema schema.json 
 --output APIClient.swift

但是即将出现的问题是所有的标量现在都是字符串。

例如: - 登录时如果我创建了电子邮件和密码的变种,我的模式将响应返回为JSON,而创建的APIClient则将响应显示为String(而不是JSON)。

因此收到错误

Apollo.GraphQLResultError(path: ["login", "response"], underlying: Apollo.JSONDecodingError.couldNotConvert

这是因为收到了String而不是JSON,并且无法将字符串转换为必需的JSON。

有人面临同样的问题吗?

1 个答案:

答案 0 :(得分:2)

所以我想通了。解决方案是添加

--passthrough-custom-scalars

在运行脚本中。这将传递像JSON这样的自定义标量。所以完整的脚本变成了

cd "${SRCROOT}/${TARGET_NAME}/GraphQL/Open"
$APOLLO_FRAMEWORK_PATH/check-and-run-apollo-codegen.sh generate $(find 
. -name '*.graphql') --schema schema.json --passthrough-custom-scalars 
--output APIOpen.swift

现在,当代码与此运行脚本一起重新编译时,JSON标量变为有效。

这花了我很多时间才弄明白。希望它可以帮助某人并节省他们的时间。感谢