Ответ
CRUD — это акроним, описывающий четыре фундаментальные операции для работы с данными в приложении:
- Create (Создание)
- Read (Чтение)
- Update (Обновление)
- Delete (Удаление)
В экосистеме Node.js CRUD-операции чаще всего реализуются в виде RESTful API с использованием фреймворков, таких как Express или Nest.js, и взаимодействием с базой данных через драйвер или ORM/ODM.
Пример набора базовых маршрутов Express для сущности Task:
const express = require('express');
const router = express.Router();
const Task = require('../models/Task'); // Модель Mongoose
// CREATE
router.post('/', async (req, res) => {
try {
const task = new Task(req.body);
await task.save();
res.status(201).json(task);
} catch (error) {
res.status(400).json({ error: error.message });
}
});
// READ (все)
router.get('/', async (req, res) => {
const tasks = await Task.find({});
res.json(tasks);
});
// READ (один)
router.get('/:id', async (req, res) => {
const task = await Task.findById(req.params.id);
if (!task) return res.status(404).json({ message: 'Task not found' });
res.json(task);
});
// UPDATE
router.patch('/:id', async (req, res) => {
const task = await Task.findByIdAndUpdate(req.params.id, req.body, { new: true, runValidators: true });
if (!task) return res.status(404).json({ message: 'Task not found' });
res.json(task);
});
// DELETE
router.delete('/:id', async (req, res) => {
const task = await Task.findByIdAndDelete(req.params.id);
if (!task) return res.status(404).json({ message: 'Task not found' });
res.status(204).send();
});
В реальных проектах эти операции дополняются валидацией входящих данных (например, с помощью Joi или class-validator), аутентификацией, авторизацией, пагинацией и фильтрацией для операций чтения.
Ответ 18+ 🔞
А, CRUD! Ну это же классика, ёпта! Как хлеб с маслом для любого бэкендера. Если ты это не понимаешь, то у тебя доверия ебать ноль к карьере в вебе.
Смотри, расшифровывается просто, как валенок:
- Create (Создать) — воткнул новую запись в базу.
- Read (Прочитать) — вытащил её оттуда, посмотрел.
- Update (Обновить) — поправил, потому что накосячил или данные поменялись.
- Delete (Удалить) — отправил нахуй, стёр к хуям.
В мире Node.js это обычно такие REST API, которые ты пишешь на Express или Nest.js, а данные пихаешь в какую-нибудь MongoDB через Mongoose или в PostgreSQL через Prisma. Волнение ебать начинается, когда пытаешься это всё связать.
Вот смотри, как это выглядит в коде для какой-нибудь сущности, ну, например, Task (задача). Представь, что это твой список дел, который ты вечно откладываешь.
const express = require('express');
const router = express.Router();
const Task = require('../models/Task'); // Это наша модель, типа шаблон для задачи
// CREATE (Создать) - Родил новую задачку
router.post('/', async (req, res) => {
try {
const task = new Task(req.body); // Берем то, что пришло в теле запроса
await task.save(); // И пихаем в базу
res.status(201).json(task); // Отправляем назад с криком "Ура, родилось!"
} catch (error) {
res.status(400).json({ error: error.message }); // А если ошибка - "Иди нахуй, неправильно заполнил"
}
});
// READ (Прочитать всё) - Достал весь свой бардак-список
router.get('/', async (req, res) => {
const tasks = await Task.find({}); // Находим ВСЕ задачи без фильтра
res.json(tasks); // Вываливаем эту кучу пользователю
});
// READ (Прочитать одну) - Ищешь конкретную задачку, которую забыл
router.get('/:id', async (req, res) => {
const task = await Task.findById(req.params.id); // Ищешь по айдишнику
if (!task) return res.status(404).json({ message: 'Task not found' }); // Если нет - "Извини, хуй найдёшь"
res.json(task); // Если нашёл - вот, держи, счастливчик
});
// UPDATE (Обновить) - Передумал, решил задачу переименовать
router.patch('/:id', async (req, res) => {
const task = await Task.findByIdAndUpdate(req.params.id, req.body, { new: true, runValidators: true });
if (!task) return res.status(404).json({ message: 'Task not found' }); // Опять не нашёл? Ну ты и **распиздяй**
res.json(task); // Всё ок, вот тебе обновлённая версия
});
// DELETE (Удалить) - Всё, забил хуй, удаляю эту задачу нафиг
router.delete('/:id', async (req, res) => {
const task = await Task.findByIdAndDelete(req.params.id);
if (!task) return res.status(404).json({ message: 'Task not found' });
res.status(204).send(); // Отправляем пустой ответ, типа "дело сделано, нет тела"
});
Конечно, в реальной жизни всё сложнее, я тебе скажу. Тут же надо данные проверять (валидация), чтобы тебе какую-нибудь манду с ушами в базу не запихнули. Надо проверять, кто это делает (аутентификация), и имеет ли он право (авторизация). А когда задач становится овердохуища, надо делать пагинацию и фильтры, чтобы не грузить всё разом. Но основа, чувак, вот она, эти четыре операции — пизда рулю всего бэкенда. Выучи это, и половина пути уже пройдена.
Видео-ответы
▶
▶
▶
▶
▶
▶