Graphql模式返回null
我试图返回一个身份validation令牌,以响应用户名和密码作为参数的graphql查询,但不知何故graphql总是返回null
。 我可以在返回之前打印令牌。
var { GraphQLObjectType, GraphQLInt, GraphQLList, GraphQLString, GraphQLSchema } = require('graphql'); let MyUser = require('./modules/user/user'); const Query = new GraphQLObjectType({ name: 'Query', description : 'UserQuery', fields: function(){ return { Token :{ type: GraphQLString, description : "Authentication token", args: { user_name: { type: GraphQLString }, password: { type: GraphQLString }, }, resolve(root, args){ let user = new MyUser(); user.authenticateUser(args.user_name, args.password, function(result){ console.log("token :"+result); return result; }) } } } } }); const Schema = new GraphQLSchema({ query: Query }); module.exports = Schema;
查询看起来像
query{ Token(user_name: "Thurman.Cassin@hotmail.com" password: "abc123") }
结果
{ "data": { "Token": null } }
我在这里做错了什么?
parsing器必须返回JSON值或导致该值的承诺。 在你的例子中,你使用callback来获取实际的REST查询:
user.authenticateUser(args.user_name, args.password, function(result){ console.log("token :"+result); return result; });
这不会工作,因为它不立即返回一个值。 你可以尝试这样的事情:
resolve(root, args){ let user = new MyUser(); return new Promise((resolve, reject) => { user.authenticateUser(args.user_name, args.password, function(result){ console.log("token :"+result); resolve(result); }); }) }
我没有运行这个代码来确保它可以正常工作,但是这个基本的想法是总是为你的parsing器和callback函数返回一个值,不幸的是,不允许这样做
- testingGraphQL API
- 在Google Cloud App Engine上运行GraphQL服务器
- 使用Passport FacebookvalidationApollo GraphQL API
- 具有明确错误的GraphQL:Query.example字段types必须是输出types,但得到:
- Docker上的节点服务器即使在端口绑定后也不能在本地主机上访问
- graphql-tag / index没有导出成员'gql'
- 有没有一种方法来从protobuf生成GraphQL模式?
- GraphQL.js Node / Express:如何将对象作为GraphQL查询parameter passing
- GraphQL让用户使用GraphQL工具