refactor: replaced arrow functions for the sake of simplicity

This commit is contained in:
2025-12-12 21:12:47 +03:00
parent 76b876ef5d
commit 4bd09cd313

View File

@@ -1,5 +1,3 @@
![backdrop](img.jpg)
# Разрабатываем первое Web API на Node.js # Разрабатываем первое Web API на Node.js
Для секции "Веб-разработка: пример Fullstack" Для секции "Веб-разработка: пример Fullstack"
@@ -165,7 +163,7 @@ npm install express
// Выбираем порт из файла конфигурации .env, либо используем порт 3000 по умолчанию // Выбираем порт из файла конфигурации .env, либо используем порт 3000 по умолчанию
const PORT = process.env.PORT || 3000; const PORT = process.env.PORT || 3000;
app.listen(PORT, () => { app.listen(PORT, function() {
console.log(`Сервер запущен и слушает порт ${PORT}`); console.log(`Сервер запущен и слушает порт ${PORT}`);
}); });
``` ```
@@ -210,7 +208,7 @@ npm install express
2. **Добавьте обработчик для корневого маршрута (`/`) перед строкой `export default app;`**: 2. **Добавьте обработчик для корневого маршрута (`/`) перед строкой `export default app;`**:
```javascript ```javascript
// Обработчик GET-запроса на корневой URL '/' // Обработчик GET-запроса на корневой URL '/'
app.get('/', (req, res) => { app.get('/', function(req, res) {
// Устанавливаем заголовок ответа // Устанавливаем заголовок ответа
res.setHeader('Content-Type', 'text/plain'); res.setHeader('Content-Type', 'text/plain');
// Отправляем текстовый ответ // Отправляем текстовый ответ
@@ -240,7 +238,7 @@ npm install express
1. **Один параметр**: 1. **Один параметр**:
```javascript ```javascript
// Когда заходят на /hello/Максим // Когда заходят на /hello/Максим
app.get('/hello/:name', (req, res) => { app.get('/hello/:name', function(req, res) {
const name = req.params.name; // = "Максим" const name = req.params.name; // = "Максим"
res.send(`Привет, ${name}!`); res.send(`Привет, ${name}!`);
}); });
@@ -249,7 +247,7 @@ app.get('/hello/:name', (req, res) => {
2. **Несколько параметров**: 2. **Несколько параметров**:
```javascript ```javascript
// Когда заходят на /book/сказки/5 // Когда заходят на /book/сказки/5
app.get('/book/:genre/:page', (req, res) => { app.get('/book/:genre/:page', function(req, res) {
const genre = req.params.genre; // = "сказки" const genre = req.params.genre; // = "сказки"
const page = req.params.page; // = "5" const page = req.params.page; // = "5"
res.send(`Жанр: ${genre}, Страница: ${page}`); res.send(`Жанр: ${genre}, Страница: ${page}`);
@@ -259,7 +257,7 @@ app.get('/book/:genre/:page', (req, res) => {
3. **Параметр в середине пути**: 3. **Параметр в середине пути**:
```javascript ```javascript
// Когда заходят на /category/электроника/product/123 // Когда заходят на /category/электроника/product/123
app.get('/category/:categoryName/product/:productId', (req, res) => { app.get('/category/:categoryName/product/:productId', function(req, res) {
const category = req.params.categoryName; // = "электроника" const category = req.params.categoryName; // = "электроника"
const productId = req.params.productId; // = "123" const productId = req.params.productId; // = "123"
res.send(`Категория: ${category}, Товар: ${productId}`); res.send(`Категория: ${category}, Товар: ${productId}`);
@@ -270,7 +268,7 @@ app.get('/category/:categoryName/product/:productId', (req, res) => {
1. В файле `app.js` добавьте маршрут: 1. В файле `app.js` добавьте маршрут:
```javascript ```javascript
// Пример запроса: GET http://localhost:3000/double/7 // Пример запроса: GET http://localhost:3000/double/7
app.get('/double/:number', (req, res) => { app.get('/double/:number', function(req, res) {
const input = req.params.number; // Получаем параметр из URL const input = req.params.number; // Получаем параметр из URL
// Проверяем, является ли параметр числом // Проверяем, является ли параметр числом
@@ -391,7 +389,7 @@ if (b === 0) {
1. Создайте маршрут `GET /api/user/:id` 1. Создайте маршрут `GET /api/user/:id`
2. Если `:id` — число, верните JSON с информацией о пользователе: 2. Если `:id` — число, верните JSON с информацией о пользователе:
```javascript ```javascript
app.get('/api/user/:id', (req, res) => { app.get('/api/user/:id', function(req, res) {
const id = req.params.id; const id = req.params.id;
if (!isNaN(id)) { if (!isNaN(id)) {
@@ -573,15 +571,15 @@ let nextId = 1;
Для POST `/api/notes` получите текст заметки из `req.body.text`, создайте объект заметки с уникальным ID и текущей датой, добавьте его в массив с помощью `push()`, увеличьте `nextId` и верните созданную заметку. Для POST `/api/notes` получите текст заметки из `req.body.text`, создайте объект заметки с уникальным ID и текущей датой, добавьте его в массив с помощью `push()`, увеличьте `nextId` и верните созданную заметку.
Для GET `/api/notes/:id` найдите заметку в массиве по ID. Используйте метод `find()`: `const note = notes.find(n => n.id === id);`. Если заметка найдена — верните её, если нет — верните ошибку 404. Для GET `/api/notes/:id` найдите заметку в массиве по ID. Используйте метод `find()`: `const note = notes.find(function(n) { return n.id === id; });`. Если заметка найдена — верните её, если нет — верните ошибку 404.
Для DELETE `/api/notes/:id` найдите индекс заметки по ID: `const index = notes.findIndex(n => n.id === id);`, затем удалите её с помощью `splice(index, 1)` и верните подтверждение удаления. Для DELETE `/api/notes/:id` найдите индекс заметки по ID: `const index = notes.findIndex(function(n) { return n.id === id; });`, затем удалите её с помощью `splice(index, 1)` и верните подтверждение удаления.
### Важные моменты ### Важные моменты
Заметки будут храниться только в памяти сервера и исчезнут при его перезапуске. Для постоянного хранения данных потребуется база данных или файловая система, но это тема для следующих занятий. Заметки будут храниться только в памяти сервера и исчезнут при его перезапуске. Для постоянного хранения данных потребуется база данных или файловая система, но это тема для следующих занятий.
### Вопросы для самопроверки ### Вопросы для самопроверки
1. Чем отличается `notes[0]` от `notes.find(n => n.id === 1)`? 1. Чем отличается `notes[0]` от `notes.find(function(n) { return n.id === 1; })`?
2. Почему лучше использовать отдельный счетчик `nextId`, а не просто длину массива? 2. Почему лучше использовать отдельный счетчик `nextId`, а не просто длину массива?
3. Какие HTTP-методы соответствуют операциям CRUD? 3. Какие HTTP-методы соответствуют операциям CRUD?