我正在使用 mysql 和 sequelize 在流星上使用 react-apollo,我仍然是 JS 的初学者。假设我的阿波罗服务器上有以下解析器功能:
export default resolvers = {
Query: {
posts(_, args){
return Post.findAndCountAll({ where: args });
},
numberOfPosts(){
return /// the number of selected posts
}
}
我想从满足某些条件的数据库中选择一些数据,然后计算所选行的数量并将它们返回到“numberOfPosts”字段中。
findAndCountAll()
返回一个对象,其中包含选定的行和计数。我想让我post()
只返回选定的行,而我的 numberOfPosts() 只返回选定帖子的计数。现在,两者都由posts() 返回。
我的架构是:
type Post {
id: Int
date: Float
text: String
}
type NumberOfPosts{
total: Int
filtered: Int
}
type Query {
posts(
id: Ind,
offset: Int,
limit: Int,
filter: String): [Post]
numberOfPosts:[NumberOfPosts]
}
schema {
query: Query
}
目标是接收以下格式的数据:
{
"data": {
"numberOfPosts": [
{
"total": 1000,
"filtered": 21
}
],
"posts": [
{
"id": 4,
"date": 5105626122,
"text": "jzybiwutudi"
},
...
]
}
}
到目前为止我的工作:尝试1:
let selectedCount;
export default resolvers = {
Query: {
posts(_, args){
return Post.findAndCountAll({where: args}).then(
function (results) {
selectedCount = results.count;
return results.rows
});
},
numberOfPosts(){
return selectedCount
}
}}
因此,我在解析器之外定义了一个帮助变量,并将其设置为所选行数,然后在 中返回计数numberOfPosts()
,这有效,但问题是,return results.rows
导致错误,我不明白为什么。
另一个问题是,那selectedCount
总是之前的行数
试试 2
另一个似乎可行的解决方案是将参数两次传递到 GraphQL 查询中,如下所示:
{
numberOfPosts(filter: "example") {
total
filtered
}
posts(filter: "example") {
id
date
text
}
}
然后两个解析器函数都知道相同的参数,所以我可以选择和计算相同的帖子。但这对我来说看起来不对,因为我必须传递相同的 args 两次,它们也会被传输两次......