【发布时间】:2021-02-28 02:16:05
【问题描述】:
好的...我是 trying to develop 一个 GraphQL 解决方案,可以将多个类型定义附加到 express-graphql graphqlHTTP() typeDef 属性,而无需担心为每种类型创建单个架构或嵌套字符串。
我的问题是每当我将参数数组传递给函数createSchema() 时,它会在数组的第二项上显示错误(是的,不是在第一项中):
注意:不确定第二个问题是实际错误还是警告。我猜这是警告。
所以,这就是函数本身:
static createSchema(typeDefs: GQLSchema | [GQLSchema]): string {
let schema = '';
if (Array.isArray(typeDefs)) {
typeDefs.forEach((typeDef) => {
schema += GQLHTTPTools.addSchema(typeDef);
});
} else {
schema = GQLHTTPTools.addSchema(typeDefs);
}
return schema;
}
// just in case:
private static addSchema(typeDef: GQLSchema): string {
const { types } = typeDef;
let schema = '';
if (types.Query !== undefined) {
schema += `type Query {\n\t${types.Query}\n}\n`;
delete types.Query;
}
if (types.Mutation !== undefined) {
schema += `type Mutation {\n\t${types.Mutation}\n}\n`;
delete types.Mutation;
}
if (types.Custom !== undefined) {
schema += types.Custom.map((type) => {
const key = Object.keys(type)[0];
const val = Object.values(type)[0];
return `type ${key} {\n\t${val}\n}`;
});
}
return schema;
}
不确定它是否重要,但这是GQLSchema 类定义:
export default class GQLSchema {
constructor(public totalTypes: number, public totalCustomTypes: number, public types: GQLType) {}
}
如果我确实传递了一个 GQLSchema 对象,它就可以工作......但如果我使用 GQLSchema 数组则不行。不知道为什么不起作用。有什么线索吗?
【问题讨论】:
-
你有堆栈跟踪吗?错误发生在哪一行?
-
我在图片中添加了一行,是 41,我的错。
-
除了 tuple-vs-array 问题之外,在实际处理字符串时,不应使用
GQLSchema作为类型。虽然,实际的根本问题首先是使用字符串 - 任何 graphql 库都应该使用对象。或者你想重新发明printSchema?
标签: javascript node.js typescript graphql