Graphql Apollo服务器未触发自定义指令

Graphql Apollo服务器未触发自定义指令,graphql,apollo-server,Graphql,Apollo Server,我试图根据apollo服务器文档编写一些身份验证逻辑,但它似乎没有启动。这是我的密码: //schemas/auth-schema.js 从“graphql标签”导入gql; 导出常量typeDefs=gql` 对象|字段_定义上的指令@auth(要求:Role=ADMIN) `; //指令/auth-directive.js 从“阿波罗服务器”导入{SchemaDirectiveVisitor}; 导出默认类AuthDirective扩展SchemaDirectiveVisitor{ vis

我试图根据apollo服务器文档编写一些身份验证逻辑,但它似乎没有启动。这是我的密码:

//schemas/auth-schema.js
从“graphql标签”导入gql;
导出常量typeDefs=gql`
对象|字段_定义上的指令@auth(要求:Role=ADMIN)
`;
//指令/auth-directive.js
从“阿波罗服务器”导入{SchemaDirectiveVisitor};
导出默认类AuthDirective扩展SchemaDirectiveVisitor{
visitObject(类型){
console.log('HERE');
}
visitSchema(){
console.log('HERE');
}
visitFieldDefinition(){
console.log('HERE');
}
}
//schemas/post-schema.js
从“graphql标签”导入gql;
从“../models”导入{Post};
导出常量typeDefs=gql`
键入Post@auth(需要:ADMIN){
身体:绳子!
描述:字符串!
id:id!
图片:字符串!
发布日期:日期时间
读取时间:Int!
鼻涕虫:绳子!
标题:字符串!
}
输入后输入{
身体:绳子!
描述:字符串!
图片:字符串!
发布日期:日期时间
标题:字符串!
}
扩展类型查询{
posts:[Post!]!@auth(需要:ADMIN)
}
扩展型突变{
addPost(输入:PostInput!):Post!@auth(需要:ADMIN)
}
`;
导出常量解析程序={
查询:{
posts:()=>Post.find({}),
},
突变:{
addPost:({input})=>Post.create(input),
},
};
//index.js
从“阿波罗服务器”导入{ApolloServer};
从“猫鼬”进口猫鼬;
从“./directions/auth directive”导入auth指令;
从“/config”导入*作为配置;
set('useNewUrlParser',true);
mongoose.set('useCreateIndex',true);
set('debug',config.env!=='production');
const server=新服务器({
模块:[
需要(“./schema/auth schema”),
需要('./架构/日期架构'),
要求(“./schema/post schema”),
需要(“./schema/role schema”),
需要(“./schema/user schema”),
],
图式纠正:{
auth:auth指令,
},
});
异步函数启动(){
等待mongoose.connect(config.mongo.url);
等待server.listen(config.http.port);
log(`server监听端口${config.http.port}`);
}
异步函数shutdown(){
等待服务器。停止();
等待猫鼬。断开连接();
log(`server shutted down`);
进程退出(0);
}
进程打开('SIGINT',关闭);
过程开启('SIGTERM',关闭);
boot();
所以,我试着在每种可能的情况下都使用@auth指令,但没有任何结果

键入Post@auth(需要:ADMIN){…}//不触发
类型查询{
posts:[Post!]!@auth(需要:ADMIN)//未触发
}
这是从控制台评估AdminDirective的内容:


我做错了什么?

那么,看看阿波罗服务器的代码,当您使用
模块
选项时,您的模式在内部是使用
构建服务定义
构建的。虽然此函数确实合并来自所有模块的指令,但它不会传递给
schemaDirectives
对象,也不会应用它


换句话说,这看起来像阿波罗服务器本身的bug。您可以提交一个问题,同时,只需使用
typeDefs
resolvers
选项,自己组合必要的文件。

乍一看,该设置看起来是正确的。您使用的是哪一版本的阿波罗服务器?@DanielRearden我使用的是阿波罗服务器2.4.0Hmm版本,我刚刚在本地测试了该代码,它对我来说运行良好。您能否更新您的问题以显示完整的
auth schema.js
?另外,如果您将
AuthDirective
的值记录在
index.js
中,它是否按照定义显示?好的,如果您使用模式交换模块并使用makeExecutableSchema,看起来效果很好。真可惜,从另一方面看,它看起来干净多了(感谢您的帮助和时间!似乎有一个问题已经打开,但没有引起太多注意:@brielov除了
makeExecutableSchema
,您还可以看看如何使用。这就是我在一个项目中实际使用的内容。我一定会看一看。谢谢!