[如何在期望枚举(Apollo服务器)时将字符串传递给GraphQL查询?

问题描述 投票:0回答:1

我正在尝试在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”}在“ where.pageType”;预期的类型为PagePageTypeType。

我了解错误的出处:期望这些枚举之一

enum CondomPagePageTypeType {
 page1
 page2
 page3
 page4
}

而且我正在将其传递给字符串,但是除了字符串以外,我不知道如何传递正在测试的值(来自Keystone)。

任何帮助,不胜感激!

graphql apollo apollo-server keystonejs
1个回答
0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.