Ren*_*kar 6 node.js graphql graphql-js
我试图返回一个身份验证令牌,以响应使用用户名和密码作为参数的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;
Run Code Online (Sandbox Code Playgroud)
查询看起来像
query{
Token(user_name: "Thurman.Cassin@hotmail.com"
password: "abc123")
}
Run Code Online (Sandbox Code Playgroud)
结果
{
"data": {
"Token": null
}
}
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?
解析器必须返回JSON值或产生该值的promise.在您的示例中,您使用回调来获取实际的REST查询:
user.authenticateUser(args.user_name, args.password, function(result){
console.log("token :"+result);
return result;
});
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为它不会立即返回值.你可以尝试这样的事情:
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);
});
})
}
Run Code Online (Sandbox Code Playgroud)
我没有运行此代码以确保它有效,但这个基本想法是始终为您的解析器和回调返回一个值,不幸的是,不允许这样做
| 归档时间: |
|
| 查看次数: |
6148 次 |
| 最近记录: |