Graphql - запрос вызова в graphqlplayground из подключенной БД - PullRequest
1 голос
/ 18 сентября 2019

Я только начинаю с 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) 

Сервер и подключение к БД работают, и когда я открываю игровую площадку, схемапоказано на рисунке.У меня есть данные в БД

Когда я запускаю запрос:

query{
  getAllRecipes{
    name
  }
}

Я получаю сообщение об ошибке "Cannot read property 'find' of undefined",

Может кто-нибудь увидеть, что я здесь делаю неправильно.

1 Ответ

1 голос
/ 18 сентября 2019

В вашем resolvers.js файле вы ожидаете, что Recipe придет из аргумента context, но вы нигде не добавили его из того, что я могу сказать из ваших фрагментов.

Во время инициализациивашего экземпляра ApolloServer, вы можете передать свойство context, которое будет внедрено во все распознаватели:

...
const server = new ApolloServer({
  typeDefs,
  resolvers,
  context: {
    Recipe,
  },
});

Свойство context также может быть функцией, которая возвращает объект в конце, в случае, еслиВы хотите что-то более сложное.

Подробнее о параметре, а также о других, которые вы можете передать, смотрите: https://www.apollographql.com/docs/apollo-server/api/apollo-server/.

...