当需要枚举(Apollo 服务器)时,如何将字符串传递给 GraphQL 查询?
How do I pass a string to a GraphQL query when it's expecting an enum (Apollo Server)?
我正在尝试在 KeystoneJS 应用程序中进行 GraphQL 查询,我需要确定是否存在某种类型的页面(如果存在该类型的页面,我不会创建它 -- 我' m 将每个页面类型实现为单例)。我的想法是搜索具有 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;
}
};
问题是我得到了错误
Variable "$where" got invalid value { pageType: "page2" } at
"where.pageType"; Expected type PagePageTypeType.
我知道错误的来源:它期待这些枚举之一
enum CondomPagePageTypeType {
page1
page2
page3
page4
}
我正在向它传递一个字符串,但我不知道如何传递我正在测试的值(来自 Keystone),除非是一个字符串。
枚举值在用作变量时总是序列化为字符串,因此问题不在于枚举值的提交方式。根据错误,问题出在 $where
的 pageType
属性 的值上。看起来 pageType
的值实际上是对象 { pageType: "page2" }
而不是 page2
。换句话说,你的 variables
属性 看起来像这样:
{
"where": {
"pageType": {
"pageType": "page2"
}
}
}
根据显示的代码,我猜测可能传递给 doesPageTypeExist
的 articleType
参数实际上并不是其类型指示的字符串。
我正在尝试在 KeystoneJS 应用程序中进行 GraphQL 查询,我需要确定是否存在某种类型的页面(如果存在该类型的页面,我不会创建它 -- 我' m 将每个页面类型实现为单例)。我的想法是搜索具有 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;
}
};
问题是我得到了错误
Variable "$where" got invalid value { pageType: "page2" } at "where.pageType"; Expected type PagePageTypeType.
我知道错误的来源:它期待这些枚举之一
enum CondomPagePageTypeType {
page1
page2
page3
page4
}
我正在向它传递一个字符串,但我不知道如何传递我正在测试的值(来自 Keystone),除非是一个字符串。
枚举值在用作变量时总是序列化为字符串,因此问题不在于枚举值的提交方式。根据错误,问题出在 $where
的 pageType
属性 的值上。看起来 pageType
的值实际上是对象 { pageType: "page2" }
而不是 page2
。换句话说,你的 variables
属性 看起来像这样:
{
"where": {
"pageType": {
"pageType": "page2"
}
}
}
根据显示的代码,我猜测可能传递给 doesPageTypeExist
的 articleType
参数实际上并不是其类型指示的字符串。