Я пытаюсь запросить и мутацию в графе QL с express -graphql, node и mongodb. Как для запроса, так и для мутации я получаю «Невозможно прочитать свойство 'collection' of undefined». Я go в БД и там есть коллекция документов. Контекст для добавления аутентификации позже. За последние 2 дня я безуспешно пробовал несколько вариантов именования коллекции. Нужно ли объявлять const? Что мне не хватает?
Сервер. js
const express = require('express');
const graphqlHTTP = require('express-graphql');
const schema = require('./graphql/schema')
const mongoose1 = require('./mongoDB')
const expressPlayground = require('graphql-playground-middleware-express').default;
const cors = require('cors')
const Event = require('./models/events')
const app = express();
app.use(cors())
app.use(express.json());
// DB
const context = async () => {
const db = await mongoose1;
return { db };
};
// Provide resolver functions for your schema fields
const resolvers = {
events: async (_, context) => {
const { db } = await context();
return db
.collection('events')
.find()
.toArray();
},
event: async ({ _id }, context) => {
const { db } = await context();
return db.collection('events').findOne({ _id });
},
createEvent: args => {
const event = new Event({
title: args.eventInput.title,
description: args.eventInput.description,
})
return event.save().then(res => {
console.log(res);
return { ...res._doc }
}).catch(err => {
console.log(err)
throw err
});
}
}
app.use(
"/graphql",
graphqlHTTP({
schema,
rootValue: resolvers,
context,
})
);
app.get('/playground', expressPlayground({ endpoint: '/graphql' }))
app.listen(5000);
console.log(`? Server ready at http://localhost:5000/graphql`);
БД
require('dotenv').config()
const mongoose = require('mongoose');
const db = process.env.MONGODB
const mongoose1 = mongoose
.connect(db, {
useNewUrlParser: true,
useCreateIndex: true,
useUnifiedTopology: true
})
.then(() => console.log('MongoDB Connected...'))
.catch(err => console.log(err));
module.exports = mongoose1
Схема
const { buildSchema } = require('graphql');
// Construct Schema
const schema = buildSchema(`
type Event {
_id: ID!
title: String!
description: String
date: String
}
input EventInput {
title: String!
description: String
date: String
}
type Query {
events: [Event!]!
event(_id: String!): Event!
}
type Mutation {
createEvent(eventInput: EventInput): Event
}
`);
module.exports = schema
Модель
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const eventSchema = new Schema({
title: {
type: String,
required: true
},
description: {
type: String,
required: true
},
date: {
type: Date,
default: Date.now
}
})
module.exports = mongoose.model('Event', eventSchema)