在加载之前从模式中删除自定义指令
Posted
技术标签:
【中文标题】在加载之前从模式中删除自定义指令【英文标题】:Remove custom directives from schema before loading 【发布时间】:2021-09-04 07:05:50 【问题描述】:我正在使用 graphql-codegen
和 typescript-mongodb
插件从 qraphql 模式生成数据库模型文件。因此我的架构包含来自typescript-mongodb
的自定义指令,例如@entity
和@column
。 codegen 工作正常,但是当我使用 graphql-tools
loadSchemaSync
函数加载架构时,我收到一个架构验证错误,它抱怨未知指令。
可能最简单的解决方案是将 mongo 插件指令定义添加到架构中(我也无法开始工作)。但实际上没有任何理由在 graphql-codegen 生成配置文件后在模式中包含这些指令。
所以我想知道在将架构文件加载到可执行架构之前,是否有一些标准方法可以从架构中删除与 mongo 相关的指令作为中间步骤?
或者有没有办法告诉 loadSchemaSync 函数忽略“未知指令”错误?
这是我当前加载架构文件的代码:
import join from "path";
import loadSchemaSync, GraphQLFileLoader from "graphql-tools"
const schema = loadSchemaSync(join(__dirname, '../src/graphql/schemas/**/*.graphql'),
loaders: [
new GraphQLFileLoader()
]
)
【问题讨论】:
【参考方案1】:听起来您还没有将 mongo codegen 指令导入到您的架构中。
您应该知道 graphql-tools 已被弃用并且不会再收到更新。您应该使用适当的范围包,例如:https://www.npmjs.com/package/@graphql-codegen/typescript-mongodb
查看文档中的使用示例。
https://www.graphql-code-generator.com/docs/plugins/typescript-mongodb#usage-example
import makeExecutableSchema from '@graphql-tools/schema';
import DIRECTIVES from '@graphql-codegen/typescript-mongodb';
const schema = makeExecutableSchema(
typeDefs: [
DIRECTIVES,
// the rest of your GraphQL types
],
resolvers,
);
【讨论】:
以上是关于在加载之前从模式中删除自定义指令的主要内容,如果未能解决你的问题,请参考以下文章