Apollo graphql:makeExecutableSchema和Playground

时间:2019-09-02 13:28:19

标签: graphql apollo-server prisma

我是一个初学者,尝试使用apollo-express和pyramida设置graphql API

一切进展顺利,但后来我决定使用此库来添加输入验证: graphql-constraint-directive

这需要我使用makeExecutableSchema来构建我的模式,以便可以使用 schemaDirectives 参数

我启动服务器的代码是这样的:

const server = new ApolloServer({
    typeDefs,
    resolvers,
    context: ({req}) => {
        const userId = getUserID(req);

        return {
            userId,
            prisma
        }
    }
});

一切都很好

但是要使用该库,我需要将其重构如下:

const schema = makeExecutableSchema({
    typeDefs,
    resolvers,
    schemaDirectives: {constraint: ConstraintDirective}
});
const server = new ApolloServer({
    schema,
    context: ({req}) => {
        const userId = getUserID(req);

        return {
            userId,
            prisma
        }
    }
});

它也起作用,我所有的查询和变异都起作用,并且验证也起作用。

但是它打破了graphql-playground:它不再能够加载我的模式和文档,两个选项卡都为空。并且显示以下错误: 无法访问服务器

它仍然有效:我无法发送我的查询,变异和所有信息,但是我不再具有代码完成功能和自动文档,因为它确实知道我的模式,因此不再有用

如果我将可执行模式替换为纯typeDefs ans解析器,则它再次正常运行后,操场会再次加载所有内容

使用makeExecutableSchema来使playgroun工作时,我应该做些不同的事情吗?

1 个答案:

答案 0 :(得分:1)

是使用<title><%= meta_title %></title> 还是直接将makeExecutableSchematypeDefs传递给resolvers构造函数都没关系-Apollo Server在无论如何。实际上,您可以直接将指令映射传递给构造函数:

ApolloServer

这是您正在使用的库的错误。该指令将自定义标量替换为自定义标量,但实际上并未将这些自定义标量添加到架构中。当Playground尝试自省该模式时,它无法在自省结果中找到自定义标量,并且无法出错。我会避免使用那个特定的库-它看起来好像不是在积极维护。