用户数据未从查询调用返回任何内容

Posted

技术标签:

【中文标题】用户数据未从查询调用返回任何内容【英文标题】:User data not returning anything from query call 【发布时间】:2020-12-16 14:23:31 【问题描述】:

我不确定我可能做错了哪一部分。我希望得到一些建议。

我在GraphiQL 中使用的查询是:

query getUser($id:Int!) 
   user(id:$id) 
     id
    email
   

对于后端,我使用的是 NodeJS。我还将用户类型声明为:

const UserType = new GraphQLObjectType(
    name: 'User',
    fields: () => (
        id:  type: GraphQLID ,
        email:  type: GraphQLString 
    )
);

我的根查询是:

const RootQuery = new GraphQLObjectType(
    name: 'RootQueryType',
    fields: 
        user: 
            type: UserType,
            args:  id:  type: GraphQLInt  ,
            resolve(parentValue, args) 
                const query = `SELECT * FROM users WHERE id=$1`;
                const values = [ args.id ];
                dbQuery.query(query, values).then(( rows ) => 
                    console.log(rows[0]);
                    return rows[0];
                );
            
        
    
);

const schema = new GraphQLSchema( query: RootQuery );
app.use(
    '/api/v1/graphql',
    graphqlHTTP(
        schema: schema,
        graphiql: true
    )
);

我得到的回报是:


  "data": 
    "user": null
  

我希望知道我可能做错了什么,导致返回 null 而不是我从数据库中查询的数据。

感谢大家的帮助。

【问题讨论】:

【参考方案1】:

配合await使用会更清晰

const RootQuery = new GraphQLObjectType(
    name: 'RootQueryType',
    fields: 
        user: 
            type: UserType,
            args:  id:  type: GraphQLInt  ,
            resolve: async(parentValue, args) 
                const query = `SELECT * FROM users WHERE id=$1`;
                const values = [ args.id ];
                const rows = await dbQuery.query(query, values);
                return rows[0];
            
        
    
);

当使用 Promise 并在 Promise 中返回任何内容时,只会将结果返回给执行的 Promise。它不会作为一个整体返回到父函数。

你也可以像下面这样返回整个 promise 函数

return dbQuery.query(query, values)

【讨论】:

感谢您的回复。我都试过了,我得到的回应是空的。第一种方法改为返回 user: id: null, email: null 即使解析器返回了数据。 它开始工作了。我不确定我改变了什么或我可能做错了什么,但你的回答非常有帮助。非常感谢:D

以上是关于用户数据未从查询调用返回任何内容的主要内容,如果未能解决你的问题,请参考以下文章

查询字符串未从子类处理

嵌套类型未从父级接收用户输入

Ajax 调用未从 ActiveRecord 返回最新数据

未从 Firebase 存储加载的用户图像

Javascript未从动态生成的表单提交数据

在私有数据库的 ckzone 中查询共享记录不返回任何内容