使用 Mongoose 和 graphql-yoga 实现分页
Posted
技术标签:
【中文标题】使用 Mongoose 和 graphql-yoga 实现分页【英文标题】:Implementing pagination with Mongoose and graphql-yoga 【发布时间】:2018-10-18 08:15:40 【问题描述】:我正在尝试使用 graphql,并使用 graphql-yoga 创建了一个简单的服务器。我的 Mongoose 产品模型查询我的数据库,两个解析器都按预期返回数据。到目前为止,一切正常,我很高兴这很容易。但是,我有一个问题。我正在尝试添加一种方法来对来自 graphQL 的结果进行分页。
我尝试了什么?
1) 向查询类型添加限制参数。
2) 在resolver中通过args访问参数
预期行为
我可以在解析器中使用 args.limit 参数并使用它来更改 Mongoose 函数
实际行为
我无法读取 arg 对象。
下面的完整代码。我如何达到这个目标?
import GraphQLServer from 'graphql-yoga'
import mongoose from "mongoose"
import products from "./models/products.js"
const connection = mongoose.connect('mongodb://myDB')
const prepare = (o) =>
o._id = o._id.toString()
return o
const typeDefs = `
type Product
_id: String
name: String
description: String
main_image: String
images: [String]
type Query
product(_id: String): Product
products(limit: Int): [Product]
`
const resolvers =
Query:
product: async (_id) =>
return (await products.findOne(_id))
,
products: async (args) =>
console.log(args.name)
return (await products.find().limit(args.limit))
,
,
const server = new GraphQLServer(
typeDefs,
resolvers
)
server.start(() => console.log('Server is running on localhost:4000'))
【问题讨论】:
【参考方案1】:字段的参数是传递给解析器的第二个参数;第一个参数是父字段解析为的值(或者在查询/突变的情况下为root
值)。所以你的解析器应该看起来更像这样:
product: (root, _id ) =>
return products.findOne(_id)
【讨论】:
经过测试并立即生效。感谢您帮助 graphql 初学者:) @daniel 我也在用 graphql-yoga 和 mongoose 测试东西,我有成功的 crud 操作,但我们知道它在删除操作时不会自动更新缓存,它通过查询在后端成功执行并返回已删除的对象id
,但是当使用前端接口完成时,它返回 null 你知道为什么会这样吗?这将非常节省时间,您可以提示我在哪里更新我的东西谢谢
@daniel-rearden
@HánzláHábib 我不确定这与原始帖子或此答案有何关系。您应该将此作为一个单独的问题发布,提供尽可能多的信息,包括相关代码。以上是关于使用 Mongoose 和 graphql-yoga 实现分页的主要内容,如果未能解决你的问题,请参考以下文章
如何使用用户名和密码连接 mongodb(mongoose)?
Egg中使用egg-mongoose和常用的Mongoose 方法
Egg中使用egg-mongoose和常用的Mongoose 方法
Egg中使用egg-mongoose和常用的Mongoose 方法