feat: extra

This commit is contained in:
2025-12-12 20:49:37 +03:00
parent b9cd7ef09f
commit 44565e226b
2 changed files with 100 additions and 0 deletions

100
README.md
View File

@@ -477,3 +477,103 @@ res.status(400).json({
### **Примеры кодов ошибок**:
- `"INVALID_NUMBERS"` — когда параметры не числа
- `"DIVISION_BY_ZERO"` — когда делим на ноль
---
![](img2.jpg)
# 👷 **Дополнительные задания (повышенная сложность!)**
## 📝 Задание 1: Использование POST и DELETE методов для редактирования текста в объявлении сайта
### Цель задания
Научиться использовать методы POST и DELETE для изменения данных на сервере, понять разницу между методами, которые только читают данные (GET) и теми, которые их изменяют.
### Теория: HTTP-методы и состояние сервера
HTTP-методы определяют тип операции, которую мы хотим выполнить. GET используется для получения данных без изменений, POST — для создания или отправки новых данных, DELETE — для удаления данных.
В этом задании вы будете использовать переменную на сервере для хранения состояния приложения между запросами. Это означает, что все пользователи, которые обращаются к серверу, будут видеть одно и то же объявление.
### Практическая задача
Создайте API для управления объявлением на сайте с тремя методами:
1. **Просмотр объявления** — GET `/api/ad`
Возвращает текущее объявление или сообщение о его отсутствии.
2. **Установка объявления** — POST `/api/ad`
Устанавливает новое объявление, отправленное в теле запроса.
3. **Очистка объявления** — DELETE `/api/ad`
Полностью удаляет текущее объявление.
### Как реализовать
Начните с создания переменной для хранения объявления в начале файла `app.js`, после импортов. Например: `let currentAd = null;`
Для GET-метода проверьте, есть ли значение в переменной `currentAd`. Если объявление существует — верните его, если нет — сообщите, что объявление не установлено.
Для POST-метода потребуется middleware `express.json()` для чтения JSON из тела запроса. Добавьте строку `app.use(express.json())` в `app.js` после создания экземпляра приложения. В обработчике POST получите текст объявления из `req.body.text` и сохраните его в переменную `currentAd`.
DELETE-метод должен просто устанавливать `currentAd = null` и возвращать подтверждение удаления.
### Важные вопросы для обсуждения
- Почему для изменения данных лучше использовать POST, а не GET?
- Как данные сохраняются между запросами разных пользователей?
- Что произойдет с объявлением при перезапуске сервера?
Для тестирования этих методов вам понадобится специальный инструмент вроде cURL или Postman, так как браузер по умолчанию отправляет только GET-запросы.
---
## 📒 Задание 2: "Ящик заметок" с использованием массива
### Цель задания
Научиться работать с массивами в JavaScript и реализовать базовые CRUD-операции (Create, Read, Update, Delete).
### Теория: Массивы в JavaScript
Массив — это упорядоченный список элементов. Создать массив можно так: `let notes = []` (пустой массив) или `let notes = ["Первая заметка", "Вторая"]` (массив с данными).
Основные операции с массивами:
- Добавление элемента: `notes.push("Новая заметка")`
- Получение элемента: `notes[0]` (первый элемент, индексы начинаются с 0)
- Удаление элемента: `notes.splice(индекс, 1)`
- Длина массива: `notes.length`
### Теория: CRUD-операции
CRUD — это основа большинства веб-приложений:
- **Create** (Создать) — добавление новой заметки (POST)
- **Read** (Чтение) — получение списка или одной заметки (GET)
- **Update** (Обновление) — изменение существующей заметки (PUT/PATCH)
- **Delete** (Удаление) — удаление заметки (DELETE)
### Практическая задача
Создайте полноценное API для управления заметками с четырьмя операциями:
1. **Получить все заметки** — GET `/api/notes`
2. **Добавить заметку** — POST `/api/notes`
3. **Получить одну заметку** — GET `/api/notes/:id`
4. **Удалить заметку** — DELETE `/api/notes/:id`
### Как реализовать
Создайте массив для хранения заметок и счетчик для ID:
```javascript
let notes = [];
let nextId = 1;
```
Для GET `/api/notes` просто верните весь массив `notes` в формате JSON.
Для POST `/api/notes` получите текст заметки из `req.body.text`, создайте объект заметки с уникальным ID и текущей датой, добавьте его в массив с помощью `push()`, увеличьте `nextId` и верните созданную заметку.
Для GET `/api/notes/:id` найдите заметку в массиве по ID. Используйте метод `find()`: `const note = notes.find(n => n.id === id);`. Если заметка найдена — верните её, если нет — верните ошибку 404.
Для DELETE `/api/notes/:id` найдите индекс заметки по ID: `const index = notes.findIndex(n => n.id === id);`, затем удалите её с помощью `splice(index, 1)` и верните подтверждение удаления.
### Важные моменты
Заметки будут храниться только в памяти сервера и исчезнут при его перезапуске. Для постоянного хранения данных потребуется база данных или файловая система, но это тема для следующих занятий.
### Вопросы для самопроверки
1. Чем отличается `notes[0]` от `notes.find(n => n.id === 1)`?
2. Почему лучше использовать отдельный счетчик `nextId`, а не просто длину массива?
3. Какие HTTP-методы соответствуют операциям CRUD?

BIN
img2.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 182 KiB