Graphql-从连接的数据库调用Graphql中的查询

Graphql-从连接的数据库调用Graphql中的查询,graphql,apollo-server,Graphql,Apollo Server,我刚开始使用graphql,在操场上调用基本查询时遇到了一些问题 我有一个server.js const mongoose = require('mongoose'); require('dotenv').config({ path: 'variables.env' }) const { ApolloServer } = require('apollo-server') //Monogoose schemas const Recipe = require('./models/Recipe')

我刚开始使用graphql,在操场上调用基本查询时遇到了一些问题

我有一个server.js

const mongoose = require('mongoose');
require('dotenv').config({ path: 'variables.env' })

const { ApolloServer } = require('apollo-server')

//Monogoose schemas
const Recipe = require('./models/Recipe');

const { typeDefs } = require('./schema');
const { resolvers } = require('./resolvers')

const server = new ApolloServer({
  typeDefs,
  resolvers
})

// Connect to DB
mongoose
  .connect(process.env.MONGO_URI, { autoIndex: false })
  .then(() => {
    console.log('DB connected')
  })
  .catch(err => console.error(err))

server.listen().then(({ url }) => {
  console.log(`server listening on ${url}`)
})
一个schema.js

const gql = require('graphql-tag');

exports.typeDefs = gql`

  type Recipe{
    _id: ID
    name: String!
    category: String!
    description: String!
    instructions: String!
    createdDate: String
    likes: Int
    username: String
  }

  type Query {
    getAllRecipes: [Recipe]
  }

`   
a resolvers.js

exports.resolvers = {

  Query: {
    getAllRecipes: async (root, args, { Recipe }) => {
      const allRecipes = await Recipe.find()
      return allRecipes
    }
  },
和猫鼬模式

const mongoose = require('mongoose');
const Schema = mongoose.Schema

const RecipeSchema = new Schema({
  name: {
    type: String,
    required: true
  },
  category: {
    type: String,
    required: true
  },
  description: {
    type: String,
    required: true
  },
  instructions: {
    type: String,
    required: true
  },
  createdDate: {
    type: Date,
    default: Date.now
  },
  likes: {
    type: Number,
    default: 0
  },
  username: {
    type: String
  }

})

module.exports = mongoose.model('Recipe', RecipeSchema) 
服务器和到DB的连接工作,当我打开游乐场时,会显示模式。我在数据库里有数据

运行查询时:

query{
  getAllRecipes{
    name
  }
}
我收到一个错误
“无法读取未定义的属性'find'”,


任何人都能看到我做错了什么。

在您的
resolvers.js
文件中,您希望
配方
来自
上下文
参数,但您没有根据我从您的代码片段中可以看出的地方添加它

在ApolloServer实例初始化期间,您可以传递一个
上下文
属性,该属性将注入所有解析程序:

。。。
const server=新服务器({
typeDefs,
解析器,
背景:{
配方
},
});
context
属性也可以是一个函数,它在末尾返回一个对象,以防需要更详细的内容

有关该选项以及您可以传递的其他选项的详细信息,请参阅: