用Mongoose和graphql-yoga实现分页

时间:2018-05-08 11:31:31

标签: node.js mongoose graphql

我正在尝试使用graphql并使用graphql-yoga创建了一个简单的服务器。我的Mongoose产品模型查询我的数据库,两个解析器都按预期返回数据。到目前为止,它一切正常,我很高兴这是多么容易。但是,我有一个问题。我试图添加一种方法来分析graphQL的结果。

我尝试了什么?

1)向Query类型添加limit参数。

2)通过解析器中的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 个答案:

答案 0 :(得分:1)

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

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