У цьому блозі ми створили 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" }
для додавання елемента.
Попит:
- Яка роль модуля
fs
? - Як 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 🎉