gpt4 book ai didi

graphql - Apollo graphql : makeExecutableSchema & playground

转载 作者:行者123 更新时间:2023-12-03 08:53:02 25 4
gpt4 key购买 nike

我是一个初学者,尝试使用 apollo-express 和 prisma 设置 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 和解析器的可执行模式,它会再次正常工作,playground 会再次加载所有内容

使用 makeExecutableSchema 时我是否应该做一些不同的事情,以使 playgroun 正常工作?

最佳答案

无论您使用 makeExecutableSchema 还是直接将 typeDefsresolvers 传递给 ApolloServer 构造函数都不重要-- Apollo Server 无论如何都会在底层使用 makeExecutableSchema 。事实上,您可以直接将指令映射传递给构造函数:

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

return {
userId,
prisma
}
}
});

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

关于graphql - Apollo graphql : makeExecutableSchema & playground,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57757827/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com