首页 文章

用Mongoose和graphql-yoga实现分页

提问于
浏览
0

我正在尝试使用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 回答

  • 1

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

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

相关问题