🚀 Від нуля до героя бекенду: освоюй Node.js, Express та MongoDB цікаво та весело 🎉

У цьому блозі ми створили Feed API, який виключає певних користувачів і використовує пагінацію для ефективної обробки великих наборів даних.

Цей підхід можна адаптувати до різних випадків використання, не обмежуючись лише додатками, подібними до Tinder. Експериментуйте з різними стратегіями пагінації та робіть ваші API масштабованими та зручними для користувачів!
Створення простого сервера

Давайте напишемо код для створення базового сервера:

  • Створіть файл з іменем server.js.
  • Додайте наступне:
const express = require('express');  
const fs = require('fs');  
const app = express();  
const PORT = 3000;
// Middleware для обробки JSON запитів  
const dataFilePath = 'data.json';  
app.use(express.json());// Отримати всі елементи  
app.get('/items', (req, res) => {  
 fs.readFile(dataFilePath, 'utf8', (err, data) => {  
 if (err) {  
 return res.status(500).json({ message: 'Помилка при читанні файлу даних' });  
 }  
 res.json(JSON.parse(data));  
 });  
});// Додати новий елемент  
app.post('/items', (req, res) => {  
 const newItem = req.body;  
 fs.readFile(dataFilePath, 'utf8', (err, data) => {  
 if (err) {  
 return res.status(500).json({ message: 'Помилка при читанні файлу даних' });  
 }  
 const items = JSON.parse(data);  
 items.push(newItem);  
 fs.writeFile(dataFilePath, JSON.stringify(items, null, 2), (writeErr) => {  
 if (writeErr) {  
 return res.status(500).json({ message: 'Помилка при записі у файл даних' });  
 }  
 res.status(201).json(newItem);  
 });  
 });  
});// Запуск сервера  
app.listen(PORT, () => {  
 console.log(`Сервер працює на http://localhost:${PORT}`);  
});

Чому модуль fs?

Модуль fs взаємодіє з файловою системою, дозволяючи читати і записувати файли. Тут він використовується для імітації простих баз даних.

Виклик для себе:

Додайте endpoint DELETE для видалення елемента за його індексом. Використовуйте Postman для тестування.

5. Налаштуйте ваш JSON файл

Створіть файл з ім'ям data.json і ініціалізуйте його порожнім масивом:

[]

Цей файл служить як базова база даних.

Цікава деталь:

JSON означає JavaScript Object Notation. Його широко використовують за простоту та зручність для читання.

Експеримент:

Додайте елементи вручну до data.json. Тестуйте отримання та додавання нових елементів за допомогою вашого API.

6. Запустіть та протестуйте сервер

Запустіть ваш сервер:

node server.js

Тестуйте його у браузері або через Postman:

  • GET http://localhost:3000/items для отримання елементів.
  • POST з JSON тілом, наприклад { "name": "Sample Item" } для додавання елемента.

Попит:

  1. Яка роль модуля fs?
  2. Як Express спрощує обробку запитів?

Крок 2: Поглиблене вивчення MongoDB та автентифікація

1. Встановлення MongoDB

MongoDB — це база даних NoSQL, ідеальна для зберігання документів, подібних до JSON. Завантажте її з MongoDB.

  • Запустіть MongoDB:
mongod

Чому MongoDB?

Вона не має схеми та підтримує динамічні поля, що робить її гнучкою для сучасних додатків. Крім того, вона масштабована і може ефективно обробляти великі обсяги даних.

Цікава деталь:

MongoDB зберігає дані в BSON (Binary JSON), що дозволяє використовувати більш різноманітні типи даних, наприклад, дати.

2. Додайте Mongoose до вашого проєкту

Mongoose — це бібліотека ODM (Object Data Modeling), яка спрощує роботу з MongoDB. Встановіть її:

npm install mongoose

Основні опції підключення:

  • useNewUrlParser: true: Використовує новий, покращений парсер рядка підключення.
  • useUnifiedTopology: true: Включає покращене керування підключеннями.

Ці налаштування спрощують і стабілізують підключення до бази даних.

Порада для професіоналів:

Опції, такі як poolSize, контролюють пул з’єднань, а autoIndex керує створенням індексів — це стане в пригоді, коли ваш проєкт розростатиметься.

3. Підключення до MongoDB

Оновіть server.js:

const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/myapp', {  
 useNewUrlParser: true,  
 useUnifiedTopology: true  
}).then(() => {  
 console.log('Підключено до MongoDB');  
}).catch(err => console.error('Помилка підключення до MongoDB:', err));

Виклик:

Експериментуйте з резервним URL для кращої надійності.

4.

Створення моделі користувача

У файлі models/User.js:

const mongoose = require('mongoose');
const userSchema = new mongoose.Schema({  
 username: { type: String, required: true, unique: true },  
 password: { type: String, required: true },  
 email: { type: String, required: true },  
 profile: {  
 firstName: String,  
 lastName: String,  
 age: Number  
 }  
});module.exports = mongoose.model('User', userSchema);

Міні-виклик:

Додайте поле role для відмінності користувачів.

5. Реалізація реєстрації та входу

Додайте маршрути:

const User = require('./models/User');
app.post('/register', async (req, res) => {  
 try {  
 const user = new User(req.body);  
 await user.save();  
 res.status(201).json(user);  
 } catch (err) {  
 res.status(400).json({ message: 'Помилка при реєстрації користувача', error: err.message });  
 }  
});app.post('/login', async (req, res) => {  
 try {  
 const user = await User.findOne(req.body);  
 if (!user) return res.status(401).json({ message: 'Невірні дані для входу' });  
 res.json({ message: 'Вхід успішний', user });  
 } catch (err) {  
 res.status(400).json({ message: 'Помилка входу', error: err.message });  
 }  
});

Забезпечення безпеки вашого додатку:

Хешуйте паролі за допомогою bcrypt для додаткової безпеки.

З цими кроками ви на правильному шляху до освоєння розробки бекенду на Node.js. Продовжуйте експериментувати, залишайтеся допитливими і насолоджуйтесь подорожжю!

Перекладено з: 🚀 From Zero to Backend Hero: Master Node.js, Express, and MongoDB the Fun Way 🎉

Leave a Reply

Your email address will not be published. Required fields are marked *