当 GraphQL 查询需要枚举(阿波罗服务器)时,如何将字符串传递给它?



我正在尝试在KeystoneJS应用程序中进行GraphQL查询,我需要确定是否存在某种类型的页面(如果该类型的页面存在,我不会创建它 - 我正在将每个页面类型实现为单例(。 我的想法是搜索所有具有where条件的页面,在该条件中,我传递了我尝试创建的页面的类型。

const PAGE_QUERY = `
query allPages($where:PageWhereInput){
allPages(where:$where) {
pageType
}
}
`;
export const doesPageTypeExist = async (query, articleType: string): Promise<boolean> => {
const where = {
pageType: articleType
};
const options = {
skipAccessControl: false,
variables: {
where
}
};
const { errors, data } = await query(allPages, options);
if (errors) {
log.error({ errors }, 'errors from GraphQL operation in Page list');
throw new Error(errors.toString());
} else {
return data?.allPages.length !== 0;
}
};

问题是我收到错误

变量 "$where" 获得无效值 { pageType: "page2" } at "where.pageType";预期类型 页页类型类型。

我了解错误来自哪里:它期待这些枚举之一

enum CondomPagePageTypeType {
page1
page2
page3
page4
}

我正在传递一个字符串,但我不知道如何传递我正在测试的值(来自 Keystone(,除了作为字符串。

枚举值在用作变量时总是序列化为字符串,因此问题不在于枚举值的提交方式。根据错误,问题出在$wherepageType属性的值上。看起来pageType的值实际上是对象{ pageType: "page2" }而不是page2。换句话说,您的variables属性如下所示:

{
"where": {
"pageType": {
"pageType": "page2"
}
}
}

根据显示的代码,我猜也许传递给doesPageTypeExistarticleType参数实际上并不是其类型所指示的字符串。

最新更新