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函数返回一个值,不幸的是,不允许这样做