Graphql模式返回null

雷内香卡

我正在尝试返回身份验证令牌,以响应以用户名和密码作为参数的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: "[email protected]" 
    password: "abc123")
}

结果

{
  "data": {
    "Token": null
  }
}

我在这里做错了什么?

无浏览器

解析器必须返回JSON值,或者返回产生该值的Promise。在您的示例中,您使用回调来获取实际的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);
    });
  })
}

我没有运行此代码来确保它能正常工作,但是不幸的是,这个基本思想是始终为解析器和回调返回一个值,但是不允许这样做

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章