问题描述
我不确定我可能在哪部分做错了。我希望得到一些建议。
我在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)