我是一个初学者,尝试使用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工作时,我应该做些不同的事情吗?
答案 0 :(得分:1)
是使用<title><%= meta_title %></title>
还是直接将makeExecutableSchema
和typeDefs
传递给resolvers
构造函数都没关系-Apollo Server在无论如何。实际上,您可以直接将指令映射传递给构造函数:
ApolloServer
这是您正在使用的库的错误。该指令将自定义标量替换为自定义标量,但实际上并未将这些自定义标量添加到架构中。当Playground尝试自省该模式时,它无法在自省结果中找到自定义标量,并且无法出错。我会避免使用那个特定的库-它看起来好像不是在积极维护。