if (newSurveys.length === surveys.length) {
return res.status(404).json({ error: 'Survey not found' });
}
writeSurveys(newSurveys);
res.status(204).send();
});
// Запуск сервера
const PORT = 3000;
app.listen(PORT, () => {
console.log(`Server is running on http://localhost:${PORT}`);
});
```
### Пояснение к коду:
1. *Маршруты*:
- `POST /surveys` – создание нового опроса с полем `editable: true`.
- `GET /surveys` – получение всех опросов.
- `PUT /surveys/:id` – редактирование опроса по ID, если `editable: true`, после чего `editable` становится `false`.
- `DELETE /surveys/:id` – удаление опроса по ID.
2. *Функции*:
- `readSurveys` – читает данные из JSON-файла.
- `writeSurveys` – записывает данные в JSON-файл.
``` project/ ├── data/ │ └── surveys.json ├── app.js └── package.json ```
### Шаг 1: Инициализация проекта
1. Создаем папку проекта и переходим в неё:
2. Инициализируем npm: 3. Устанавливаем Express.js: ### Шаг 2: Создаем файл `surveys.json` для хранения опросовСоздаем папку `data` и файл `surveys.json` в ней с начальным содержимым:
```json [] ```
Это будет массив объектов, где каждый объект — отдельный опрос.
### Шаг 3: Создаем файл `app.js` для серверной логики
Вот код для `app.js`:
```javascript const express = require('express'); const fs = require('fs'); const app = express();
app.use(express.json());
const surveysFilePath = './data/surveys.json';
// Функция для чтения данных из файла const readSurveys = () => { const data = fs.readFileSync(surveysFilePath, 'utf-8'); return JSON.parse(data); };
// Функция для записи данных в файл const writeSurveys = (surveys) => { fs.writeFileSync(surveysFilePath, JSON.stringify(surveys, null, 2)); };
// Создание нового опроса app.post('/surveys', (req, res) => { const surveys = readSurveys(); const newSurvey = { id: Date.now(), ...req.body, editable: true }; surveys.push(newSurvey); writeSurveys(surveys); res.status(201).json(newSurvey); });
// Получение всех опросов app.get('/surveys', (req, res) => { const surveys = readSurveys(); res.json(surveys); });
// Редактирование опроса (если он редактируемый) app.put('/surveys/:id', (req, res) => { const surveys = readSurveys(); const surveyId = parseInt(req.params.id); const surveyIndex = surveys.findIndex(survey => survey.id === surveyId);
});// Удаление опроса app.delete('/surveys/:id', (req, res) => { const surveys = readSurveys(); const surveyId = parseInt(req.params.id); const newSurveys = surveys.filter(survey => survey.id !== surveyId);
});// Запуск сервера const PORT = 3000; app.listen(PORT, () => { console.log(`Server is running on http://localhost:${PORT}`); }); ```
### Пояснение к коду:
1. *Маршруты*: - `POST /surveys` – создание нового опроса с полем `editable: true`. - `GET /surveys` – получение всех опросов. - `PUT /surveys/:id` – редактирование опроса по ID, если `editable: true`, после чего `editable` становится `false`. - `DELETE /surveys/:id` – удаление опроса по ID.
2. *Функции*: - `readSurveys` – читает данные из JSON-файла. - `writeSurveys` – записывает данные в JSON-файл.
### Шаг 4: Запуск проекта
Запустите сервер командой:
```bash node app.js ```
Теперь API будет доступен по адресу `http://localhost:3000`.