【问题标题】:Implementing pagination with Mongoose and graphql-yoga使用 Mongoose 和 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'))

【问题讨论】:

    标签: node.js mongoose graphql


    【解决方案1】:

    字段的参数是传递给解析器的第二个参数;第一个参数是父字段解析为的值(或者在查询/突变的情况下为root 值)。所以你的解析器应该看起来更像这样:

    product: (root, { _id }) => {
      return products.findOne(_id)
    }
    

    【讨论】:

    • 经过测试并立即生效。感谢您帮助 graphql 初学者:)
    • @daniel 我也在用 graphql-yoga 和 mongoose 测试东西,我有成功的 crud 操作,但我们知道它在删除操作时不会自动更新缓存,它通过查询在后端成功执行并返回已删除的对象id,但是当使用前端接口完成时,它返回 null 你知道为什么会这样吗?这将非常节省时间,您可以提示我在哪里更新我的东西谢谢
    • @daniel-rearden
    • @HánzláHábib 我不确定这与原始帖子或此答案有何关系。您应该将此作为一个单独的问题发布,提供尽可能多的信息,包括相关代码。
    猜你喜欢
    • 2017-11-18
    • 2019-12-23
    • 2015-11-10
    • 2019-02-20
    • 2018-07-26
    • 2019-12-18
    • 2019-09-06
    • 2019-03-13
    • 2023-02-16
    相关资源
    最近更新 更多