Цей проект демонструє повну інтеграцію Express.js сервера з MongoDB Atlas, включаючи всі основні операції CRUD (Create, Read, Update, Delete) та розширені можливості роботи з базою даних.
Проект побудований на основі Node.js та Express.js фреймворку з використанням MongoDB Atlas як хмарної бази даних. API надає доступ до колекцій фільмів, театрів, коментарів та вбудованих фільмів з можливістю виконання всіх основних операцій з даними.
npm install
.env
в кореневій директорії проекту:
MONGO_CONNECTION=your_mongodb_atlas_connection_string
PORT=3000
Замініть your_mongodb_atlas_connection_string
на ваш справжній рядок підключення до MongoDB Atlas
node app.js
http://localhost:3000
Повертає список всіх доступних ендпоінтів API з їх описом.
Приклад відповіді:
{
"message": "MongoDB Atlas Express API",
"endpoints": {
"GET /theaters": "Отримати театри",
"GET /comments": "Отримати коментарі",
"GET /embedded_movies": "Отримати вбудовані фільми",
"GET /movies": "Отримати фільми",
"GET /movies/projection?fields=title,year": "Отримати фільми з проекцією полів",
"POST /movies": "Створити новий фільм",
"POST /movies/many": "Створити багато фільмів",
"PUT /movies/:id": "Оновити фільм за ID",
"PUT /movies": "Оновити багато фільмів",
"PUT /movies/:id/replace": "Замінити фільм за ID",
"DELETE /movies/:id": "Видалити фільм за ID",
"DELETE /movies": "Видалити багато фільмів"
}
}
Отримує список театрів з бази даних (обмежено 10 записами).
Приклад запиту:
curl -X GET http://localhost:3000/theaters
Отримує список коментарів з бази даних (обмежено 10 записами).
Приклад запиту:
curl -X GET http://localhost:3000/comments
Отримує список вбудованих фільмів з бази даних (обмежено 10 записами).
Приклад запиту:
curl -X GET http://localhost:3000/embedded_movies
Отримує список фільмів з бази даних (обмежено 10 записами).
Приклад запиту:
curl -X GET http://localhost:3000/movies
Приклад відповіді:
[
{
"_id": "573a1390f29313caabcd42e8",
"title": "The Great Train Robbery",
"year": 1903,
"genres": ["Short", "Western"],
"plot": "A group of bandits stage a brazen train hold-up...",
"runtime": 12
}
]
Отримує список фільмів з можливістю вибору конкретних полів (проекція).
Параметри запиту:
fields
- список полів через кому для відображенняПриклад запиту:
curl -X GET "http://localhost:3000/movies/projection?fields=title,year,genres"
Приклад відповіді:
[
{
"_id": "573a1390f29313caabcd42e8",
"title": "The Great Train Robbery",
"year": 1903,
"genres": ["Short", "Western"]
}
]
Створює новий фільм в базі даних (insertOne).
Тіло запиту:
{
"title": "Новий фільм",
"year": 2024,
"genres": ["Drama", "Action"],
"plot": "Опис сюжету фільму",
"runtime": 120
}
Приклад запиту:
curl -X POST http://localhost:3000/movies \
-H "Content-Type: application/json" \
-d '{
"title": "Тестовий фільм",
"year": 2024,
"genres": ["Drama"],
"plot": "Це тестовий фільм",
"runtime": 90
}'
Приклад відповіді:
{
"message": "Movie created successfully",
"insertedId": "686fdd2bd7c17a85dc6a2ace"
}
Створює кілька фільмів одночасно в базі даних (insertMany).
Тіло запиту:
[
{
"title": "Фільм 1",
"year": 2024,
"genres": ["Action"],
"plot": "Перший фільм",
"runtime": 100
},
{
"title": "Фільм 2",
"year": 2024,
"genres": ["Comedy"],
"plot": "Другий фільм",
"runtime": 95
}
]
Приклад запиту:
curl -X POST http://localhost:3000/movies/many \
-H "Content-Type: application/json" \
-d '[
{
"title": "Фільм 1",
"year": 2024,
"genres": ["Action"],
"plot": "Перший фільм",
"runtime": 100
},
{
"title": "Фільм 2",
"year": 2024,
"genres": ["Comedy"],
"plot": "Другий фільм",
"runtime": 95
}
]'
Приклад відповіді:
{
"message": "Movies created successfully",
"insertedCount": 2,
"insertedIds": {
"0": "686fdd2bd7c17a85dc6a2acf",
"1": "686fdd2bd7c17a85dc6a2ad0"
}
}
Оновлює конкретний фільм за його ID (updateOne).
Параметри URL:
id
- MongoDB ObjectId фільмуТіло запиту:
{
"plot": "Оновлений опис сюжету",
"runtime": 130
}
Приклад запиту:
curl -X PUT http://localhost:3000/movies/686fdd2bd7c17a85dc6a2ace \
-H "Content-Type: application/json" \
-d '{
"plot": "Оновлений опис сюжету",
"runtime": 130
}'
Приклад відповіді:
{
"message": "Movie updated successfully",
"modifiedCount": 1
}
Оновлює кілька фільмів одночасно за заданими критеріями (updateMany).
Тіло запиту:
{
"filter": {
"year": 2024
},
"update": {
"updated": true,
"updatedAt": "2024-01-10T12:00:00.000Z"
}
}
Приклад запиту:
curl -X PUT http://localhost:3000/movies \
-H "Content-Type: application/json" \
-d '{
"filter": {"year": 2024},
"update": {"updated": true, "updatedAt": "2024-01-10T12:00:00.000Z"}
}'
Приклад відповіді:
{
"message": "Movies updated successfully",
"matchedCount": 3,
"modifiedCount": 3
}
Повністю замінює документ фільму новими даними (replaceOne).
Параметри URL:
id
- MongoDB ObjectId фільмуТіло запиту:
{
"title": "Повністю новий фільм",
"year": 2025,
"genres": ["Sci-Fi"],
"plot": "Цей фільм був повністю замінений",
"runtime": 150,
"replaced": true
}
Приклад запиту:
curl -X PUT http://localhost:3000/movies/686fdd2bd7c17a85dc6a2ace/replace \
-H "Content-Type: application/json" \
-d '{
"title": "Повністю новий фільм",
"year": 2025,
"genres": ["Sci-Fi"],
"plot": "Цей фільм був повністю замінений",
"runtime": 150,
"replaced": true
}'
Приклад відповіді:
{
"message": "Movie replaced successfully",
"modifiedCount": 1
}
Видаляє конкретний фільм за його ID (deleteOne).
Параметри URL:
id
- MongoDB ObjectId фільмуПриклад запиту:
curl -X DELETE http://localhost:3000/movies/686fdd2bd7c17a85dc6a2ace
Приклад відповіді:
{
"message": "Movie deleted successfully",
"deletedCount": 1
}
Видаляє кілька фільмів одночасно за заданими критеріями (deleteMany).
Тіло запиту:
{
"filter": {
"year": 2024
}
}
Приклад запиту:
curl -X DELETE http://localhost:3000/movies \
-H "Content-Type: application/json" \
-d '{
"filter": {"year": 2024}
}'
Приклад відповіді:
{
"message": "Movies deleted successfully",
"deletedCount": 2
}
API включає комплексну обробку помилок для всіх ендпоінтів:
404 Not Found:
{
"error": "Movie not found"
}
400 Bad Request:
{
"error": "Request body must be an array"
}
500 Internal Server Error:
{
"error": "Internal server error"
}
Проект включає автоматизований тестовий файл test_api.js
, який перевіряє всі ендпоінти API.
node app.js
node test_api.js
js-lesson-63-mongo-atlas/
├── app.js # Головний файл сервера
├── package.json # Залежності та скрипти
├── package-lock.json # Зафіксовані версії залежностей
├── .env # Змінні середовища (не включено в git)
├── .env.example # Приклад файлу змінних середовища
├── test_api.js # Автоматизовані тести API
├── README.md # Документація проекту
└── node_modules/ # Встановлені залежності
Всі чутливі дані, такі як рядки підключення до бази даних, зберігаються в файлі .env
та не включаються в систему контролю версій.
API включає базову валідацію вхідних даних для запобігання помилкам та забезпечення цілісності даних.
Всі операції з MongoDB ObjectId правильно обробляються з використанням офіційного драйвера MongoDB.
Всі операції з базою даних логуються в консоль для відстеження та налагодження.
Проект можна легко розширити додаванням:
Для повідомлення про помилки або пропозицій щодо покращення, будь ласка, створіть issue в репозиторії проекту.
Цей проект розповсюджується під ліцензією MIT. Дивіться файл LICENSE для детальної інформації.
Автор: Manus AI
Дата створення: Січень 2024
Версія: 1.0.0