javascript — отношения GraphQL — переполнение стека

Отношения GraphQL

Я следую учебным пособиям Academind, так что это видео является моей текущей точкой зрения: https://www.youtube.com/watch?v=MRrcUQhZwBc

Итак, мой текущий код:

 const express = require('express'); const bodyParser = require('body-parser'); const graphqlHttp = require('express-graphql'); const { buildSchema } = require('graphql'); const mongoose = require('mongoose'); const bcrypt = require('bcryptjs'); const Event = require('./models/event'); const User = require('./models/user'); const app = express(); app.use(bodyParser.json()); app.use( '/graphql', graphqlHttp({ schema: buildSchema(` type Event { _id: ID! title: String! description: String! price: Float! date: String! } type User { _id: ID! email: String! password: String } input EventInput { title: String! description: String! price: Float! date: String! } input UserInput { email: String! password: String! } type RootQuery { events: [Event!]! } type RootMutation { createEvent(eventInput: EventInput): Event createUser(userInput: UserInput): User } schema { query: RootQuery mutation: RootMutation } `), rootValue: { events: () ={amp}gt; { return Event.find() .then(events ={amp}gt; { return events.map(event ={amp}gt; { return { ...event._doc, _id: event.id }; }); }) .catch(err ={amp}gt; { throw err; }); }, createEvent: args ={amp}gt; { const event = new Event({ title: args.eventInput.title, description: args.eventInput.description, price:  args.eventInput.price, date: new Date(args.eventInput.date), creator: '5c0f6dcde049d205fa2471dc' }); let createdEvent; return event .save() .then(result ={amp}gt; { createdEvent = { ...result._doc, _id: result._doc._id.toString() }; return User.findById('5c0f6dcde049d205fa2471dc'); }) .then(user ={amp}gt; { if (!user) { throw new Error('User not found.'); } user.createdEvents.push(event); return user.save(); }) .then(result ={amp}gt; { return createdEvent; }) .catch(err ={amp}gt; { console.log(err); throw err; }); }, createUser: args ={amp}gt; { return User.findOne({ email: args.userInput.email }) .then(user ={amp}gt; { if (user) { throw new Error('User exists already.'); } return bcrypt.hash(args.userInput.password, 12); }) .then(hashedPassword ={amp}gt; { const user = new User({ email: args.userInput.email, password: hashedPassword }); return user.save(); }) .then(result ={amp}gt; { return { ...result._doc, password: null, _id: result.id }; }) .catch(err ={amp}gt; { throw err; }); } }, graphiql: true }) ); mongoose .connect( `mongodb srv://${process.env.MONGO_USER}:${ process.env.MONGO_PASSWORD }@cluster0-ntrwp.mongodb.net/${process.env.MONGO_DB}?retryWrites=true` ) .then(() ={amp}gt; { app.listen(3000); }) .catch(err ={amp}gt; { console.log(err); }); 

В настоящее время я создал события с отношением к пользователю. Теперь я хочу получить все события от пользователя. Поэтому я нашел эту статью: https://devhints.io/graphql Я хочу использовать «Поиск», поэтому мой код для запроса будет:

 { events(_id: "5da717be4330150430fd770e") { _id } } 

Но я получаю эту ошибку:

 { "errors": [ { "message": "Unknown argument "id" on field "events" of type "RootQuery".", "locations": [ { "line": 2, "column": 10 } ] } ] } 

Но что мне нужно сделать, чтобы это заработало?

Понравилась статья? Поделиться с друзьями:
JavaScript & TypeScript
Adblock
detector