是否可以直接从模式中获取fragmentTypes?
IntrospectionFragmentMatcher的文档显示了如何获取这些内容并将其存储在JSON文件中-但它似乎仅考虑客户端使用,并假设您拥有运行中的服务器。
由于我使用的是与GraphQL API相同的服务器以及用于渲染应用程序,因此这很麻烦。我仍然可以按照文档所说的那样,通过一个额外的构建步骤来做到这一点,但这实际上意味着:
.json
文件我觉得必须有一种更简单的方法来做到这一点。
渲染应用程序时,我正在使用SchemaLink
创建一个新的Apollo客户端,所以我已经有一个充分准备的架构。
现在我有这个:
import introspectionQueryResultData from './fragmentTypes.json'
const fragmentMatcher = new IntrospectionFragmentMatcher({
introspectionQueryResultData,
})
const render = ({ schema, context }) => async (req, res, next) => {
const client = new ApolloClient({
ssrMode: true,
link: new SchemaLink({ schema, context }),
cache: new InMemoryCache({
fragmentMatcher,
}),
})
// ...
我希望能够进行如下操作:
const render = ({ schema, context }) => async (req, res, next) => {
const client = new ApolloClient({
ssrMode: true,
link: new SchemaLink({ schema, context }),
cache: new InMemoryCache({
fragmentMatcher: fragmentMatcherFromSchema(schema)
}),
})
// ...
这可能吗?
答案 0 :(得分:0)
这很有可能,但是我还没有尝试在运行时完全做到这一点。 但是,您可以避免必须运行启动服务器才能提取片段。
如果您使用的是GraphQL代码生成器(https://graphql-code-generator.com/docs/getting-started/)。
除了服务器正在运行的URL之外,您还可以为模式指定各种输入,请参见: https://graphql-code-generator.com/docs/getting-started/schema-field#available-formats
您至少可以减少以下步骤