Создать модель

Создайте новую папку models внутри папки backend и создайте в ней новый файл с именем todoModel.js. В этом файле я сделаю схему ресурсов todos.

const mongoose = require('mongoose');
const todoSchema = mongoose.Schema(
  {
    text: {
      type: String,
      required: [true, 'Please add a text value'],
    },
  },
  {
    timestamps: true,
  }
);
module.exports = mongoose.model('Todo', todoSchema);

установив timestamps: true, Mongoose автоматически создаст поля createdAt и updatedAt.

Добавить задачу

Сначала я обновлю вызов POST в файле todosController.js.

const Todo = require('../models/todoModel');
const setTodo = asyncHanlder(async (req, res) => {
  if (!req.body.text) {
    res.status(400);
    throw new Error('Please add text field');
  }
  const todo = await Todo.create({
    text: req.body.text,
  });
  res.status(200).json(todo);
})

Я использую метод create Mongoose и передаю текст из тела запроса и возвращаю точную задачу из базы данных.
На почтальоне это будет выглядеть так

Получить todo

В функции get todos я буду использовать метод find Mongoose. Это добавит все todos. Позже я изменю его, чтобы получать задачи от конкретного пользователя.

const getTodos = asyncHanlder(async (req, res) => {
  const todos = await Todo.find();
  res.status(200).json(todos)
});

На почтальоне это будет отображаться так

Обновить список дел

В функции обновления задач я буду использовать метод findByIdAndUpdate для обновления уже добавленной задачи.

const updateTodo = asyncHanlder(async (req, res) => {
  const todo = await Todo.findById(req.params.id);
  if (!todo) {
    res.status(400);
    throw new Error('Todo not found');
  }
  const updatedTodo = await Todo.findByIdAndUpdate(req.params.id, req.body, {
    new: true,
  });
  res.status(200).json(updatedTodo);
})

и результат будет таким

Удалить задачу

Для удаления задачи я сначала получу задачу, найдя идентификатор, а затем использую метод remove для ее удаления.

const deleteTodo = asyncHanlder(async (req, res) => {
  const todo = await Todo.findById(req.params.id);
  if (!todo) {
    res.status(400);
    throw new Error('Todo not found');
  }
  await todo.remove();
  res.status(200).json({ id: req.params.id });
})

На почтальоне это будет отображаться так

Вот как вы можете создавать свои API CRUD в MongoDB с помощью Mongoose и Express.

Спасибо за прочтение!
Не стесняйтесь подключаться к Twitter