GraphQL、Relay 和 Mongodb (mongoose) 如何获取数组
Posted
技术标签:
【中文标题】GraphQL、Relay 和 Mongodb (mongoose) 如何获取数组【英文标题】:GraphQL, Relay and Mongodb (mongoose) how to fetch array 【发布时间】:2016-11-09 01:45:46 【问题描述】:我无法使用 mongoose 获取数组或对象以在 Relay 连接中使用它,实际上这工作正常:
let queryType = new GraphQLObjectType(
name: 'Query',
fields: () => (
getUsers:
type: new GraphQLList(userType),
resolve: (_, args) =>
return new Promise((resolve, reject) =>
Users.find(args, (err, users) =>
err ? reject(err) : resolve(users);
);
);
)
);
在 GraphiQL 中我可以得到数组。但是当我尝试使用与 Relay 相同的“解决”功能时,它不起作用!
getUsers:
node: nodeField,
type: usersType,
resolve: (_, args) =>
return new Promise((resolve, reject) =>
Users.find(args, (err, users) =>
err ? reject(err) : resolve(users);
);
);
我认为原因是因为 Users.find() 返回 Promise 而不是 Array 或 Obj。 如果我只是将“Users.find()”更改为具有返回数组的任何其他函数,则相同的函数可以正常工作。
所以主要问题是如何使用“Users.find()”而不是 Promise 获取数组或对象? (,lean(), .exec()) 也无济于事。
【问题讨论】:
【参考方案1】:npm i graphql-relay-connection --save
const connectionFromPromisedArray = mongooseConnection;
我们可以传递 Promise,而不是 connectionFromArray(get(), args)
:connectionFromPromisedArray(collection.find(), args)
最后,您无需大量代码即可从 Promise 获取数组。
【讨论】:
以上是关于GraphQL、Relay 和 Mongodb (mongoose) 如何获取数组的主要内容,如果未能解决你的问题,请参考以下文章