
Создать модель
Создайте новую папку 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