Graphql + axios - 过滤和排序
Posted
技术标签:
【中文标题】Graphql + axios - 过滤和排序【英文标题】:Graphql + axios - filtering and sorting 【发布时间】:2020-07-14 17:32:35 【问题描述】:如何过滤和排序数据?关于排序,我应该使用 gatsby.js 吗?还有其他方法吗?
const RootQuery = new GraphQLObjectType(
name: "Query",
description: "Root Query",
fields: () => (
member:
type: MemberType,
description: "A Single Person",
args:
nick: type: GraphQLString
,
resolve(parent, args)
return axios
.get("http://25.98.140.121:5000/data")
.then(members.find(member => member.nick === args.nick))
,
members:
type: new GraphQLList(MemberType),
description: "List of All Members",
resolve(parent, args)
return axios
.get("http://25.98.140.121:5000/data")
.then(res => res.data)
,
school:
type: SchoolType,
description: "A Single School",
args:
name: type: GraphQLString
,
resolve: (parent, args) => schools.find(school => school.name === args.name)
,
schools:
type: new GraphQLList(SchoolType),
description: "List of All Schools",
resolve(parent, args)
return axios
.get("http://25.98.140.121:5000/data")
.then(res => res.data)
)
);
当然上面的过滤(学校,会员)不起作用,因为我不知道如何连接'find'和'return axios'。这样我没有得到过滤的数据,当我使用成员(昵称:John)或学校(名称:XYZ)。 希望你明白我的意思。我应该改变什么?或者,也许您有其他解决方案?
【问题讨论】:
请具体说明哪些代码“不起作用”。那里有四种不同的功能。你对哪一个有问题? 对不起,我已经编辑了我的帖子。 【参考方案1】:离你不远了。 axios.get
返回一个 Promise,您在解析器中正确返回了它。您还正确地使用了then
来修改该 Promise 的已解析值。这里唯一的问题是传递给then
的参数应该是一个函数。所以你想做这样的事情:
return axios
.get("http://25.98.140.121:5000/data")
.then(res => res.data.find(member => member.nick === args.nick))
您传递给then
的任何函数都将使用您正在调用then
的Promise 的解析值调用。因此,如果axios.get
返回一个将解析为对象成员数组的 Promise,则该值将传递给您的函数。请注意,我们在上面定义了内联函数,但也可以单独定义:
const getMemberByNick = (res) => res.data.find(member => member.nick === args.nick)
return axios
.get("http://25.98.140.121:5000/data")
.then(getMemberByNick)
甚至
const getMemberByNick = (data) => data.find(member => member.nick === args.nick)
return axios
.get("http://25.98.140.121:5000/data")
.then(res => getMemberByNick(res.data))
【讨论】:
现在我得到“members.find 不是函数”。谢谢! 糟糕。 axios 返回一个response object,所以我们需要访问它的data
属性以上是关于Graphql + axios - 过滤和排序的主要内容,如果未能解决你的问题,请参考以下文章
在 AWS Amplify GraphQL 中对结果进行排序而不进行过滤