feat: extra
This commit is contained in:
100
README.md
100
README.md
@@ -477,3 +477,103 @@ res.status(400).json({
|
||||
### **Примеры кодов ошибок**:
|
||||
- `"INVALID_NUMBERS"` — когда параметры не числа
|
||||
- `"DIVISION_BY_ZERO"` — когда делим на ноль
|
||||
|
||||
---
|
||||
|
||||

|
||||
|
||||
# 👷 **Дополнительные задания (повышенная сложность!)**
|
||||
|
||||
## 📝 Задание 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?
|
||||
|
||||
Reference in New Issue
Block a user