Эпизод 6: Создание преобразователей заметок (клон Evernote)

В предыдущем эпизоде мы создали нашу схему MongoDB и установили между ними ссылки, а также обновили нашу схему GraphQL. Если пропустили, то можете найти здесь → Часть 5

В этом эпизоде мы работаем над созданием нашего распознавателя заметок, никаких фиктивных данных или лол, на этот раз мы будем общаться с БД и хранить эту информацию.

Повестка дня:

  • Запустить сервер
  • Организуйте файлы
  • CRD (CRUD) операции с распознавателем заметок
  • Тестовые запросы

Запустить сервер

ШАГ 1. Перейдите в папку проекта и запустите сервер yarn start или npm run start.

ШАГ 2: Убедитесь, что при запуске сервера вы все еще подключены к mongoDB. Уверен, вам нужно войти на сайт mongoDB

Если вы все еще не видите connected to mongodb при запуске сервера, откройте другую вкладку в своем терминале и запустите mongo, чтобы запустить сервер mongoDB. Однако я считаю, что вам больше не нужно запускать сервер mongoDB, а просто войти на сайт. (изображение выше).

Организуйте файлы

В настоящее время у нас есть фиктивные распознаватели в файле schema.js, я хочу, чтобы вы удалили его ВСЕ, потому что мы собираемся начать с распознавателей с нуля. На данный момент в файле schema.js не должно быть распознавателей.

ШАГ 1: Создайте папку resolvers в корне нашего проекта (evernoteclone)

ШАГ 2: В папке распознавателей создайте файл index.js, файл users.js и файл notes.js. Пользователи и заметки — это то, где мы будем хранить наши преобразователи с этого момента. Это должно выглядеть так

|--resolvers
  |--index.js
  |--user.js
     // user resolvers
  |--notes.js
    // note resolvers

ШАГ 3: Внутри файла index.js скопируйте это, чтобы экспортировать все ваши преобразователи и объединить их в один основной преобразователь для использования в вашем файле server.js.

const notesResolver = require('./notes')
const usersResolver = require('./users')
const allResolvers = {
  ...usersResolver,
  ...notesResolver
}
module.exports = allResolvers

ШАГ 4: В вашем файле server.js потребуйте их и используйте как rootValue и удалите другой преобразователь, который у вас был раньше

const allResolvers = require("./resolvers/index");
app.use( "/graphql",
  graphqlHTTP({
  schema: ourSchema,
  rootValue: allResolvers,
  graphiql: true
})
);

Преобразователи примечаний (CRD) Создать, прочитать, удалить

ШАГ 1. Перейдите к файлу преобразователя заметок.

ШАГ 2: В верхней части файла укажите модель Note, которая нам нужна.

const Note = require('../models/notes')

ШАГ 3: После того, как вам потребуется модель Note, создайте файл module.exports. Здесь мы будем хранить все наши преобразователи заметок.

module.exports = {
// Create note and save in DB
 createNote: async ({noteInput})=> {
   const note = new Note({
     title: noteInput.title,
     content: noteInput.content,
     image: noteInput.image
   }
   let notes;
   try {
     const result = await note.save()
     notes = {
       ...result._doc
      }
     return notes
     }catch (err){
      throw err
     }
  },
 // Read notes in DB
notes: async () =>{
  try {
    const Notes = await Note.find({})return Notes.map(note =>{
    return {...note._doc}
    })
  }catch(err){
    throw err
  }
 },
// Read single note by id
note: async ({_id}) =>{
  try{
    const findNote = await Note.findById(_id)
    return {
      ...findNote._doc
    }
   }catch(err){
      throw err
   }
 },
// Delete note by id
deleteNote: async({_id}) =>}
try {
  const note = await Note.findByIdAndRemove({_id: _id})
  return {...note._doc}
 }catch(err){
    throw err
  }
 }
}

Я знаю, вы, вероятно, думаете: эй, подождите, что только что произошло? Позвольте мне объяснить, что делает каждый из них.

  • Преобразователь Создать заметку создает заметку с использованием нашей модели, сохраняет эту заметку (и сохраняет ее в переменной результата), а затем возвращает этот документ внутри объекта с помощью оператора распространения. Единственный способ получить документ заметки — добавить result._doc . Помните, что это фактически сохраняет нашу заметку внутри БД. {...result._doc}
  • Преобразователь заметок для чтения (notes) Мы создали переменную заметок и сохранили все заметки, которые мы нашли в БД, используя нашу модель заметок, затем мы сопоставляем их и возвращаем эти документы в объект {...notes._doc}.
  • В преобразователе одной заметки( note ) мы уничтожили параметры, чтобы получить идентификатор, который мы передали из нашей схемы graphql, мы ищем в БД заметку с тем же идентификатором, что и заметка, которую мы передали в качестве параметров. и вернул единственную заметку в объекте {...findNote._doc} .
  • Преобразователь заметок для удаления ( deleteNote ) Мы снова уничтожили параметры для идентификатора, затем мы искали в БД заметку с тем же идентификатором, который мы передали в параметрах. Но на этот раз мы вернули заметку, которая была удалена, поэтому мы точно знаем, что она была удалена. {...note._doc} .

Теперь, когда мы закончили все наши преобразователи заметок, мы можем начать тестирование этих запросов в GraphiQL.

Тестовые запросы

Перейдите на свой localhost:5000/graphql и создайте заметку, удалите заметку, найдите заметку, перечислите заметки.

Если все прошло хорошо, вы должны увидеть только что созданную заметку, и она должна быть сохранена в вашей базе данных mongoDB. Я советую запустить эти же запросы, чтобы проверить другие, чтобы убедиться, что все работает правильно :)

Ну, это все для этого эпизода. Надеюсь, вам понравилось, дальше будет больше :)

Вот версия видео, если интересно → Создание преобразователей заметок