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

问题描述

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

我在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而不是从数据库中查询的数据。

谢谢您的帮助。

解决方法

如果您将其与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函数

return dbQuery.query(query,values)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...