我正在尝试返回身份验证令牌,以响应以用户名和密码作为参数的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] 删除。
我来说两句