Введение
Node.js - это мощная платформа для создания серверных приложений на JavaScript. В этой статье мы рассмотрим основы Node.js, его преимущества и как начать разработку серверных приложений.
Почему Node.js?
- Единый язык: JavaScript на фронтенде и бэкенде
- Большая экосистема: npm содержит тысячи готовых пакетов
- Высокая производительность: Асинхронная природа Node.js
- Активное сообщество: Большое количество разработчиков и ресурсов
Что такое Node.js?
Основные концепции
Особенности платформы
- Выполнение JavaScript вне браузера
- Асинхронная модель выполнения
- Событийно-ориентированная архитектура
- Большая экосистема пакетов (npm)
Преимущества использования
- Единый язык на клиенте и сервере
- Высокая производительность
- Большое сообщество
- Богатая экосистема
Начало работы
1. Установка и настройка
Установка Node.js
1
2
3
4
5
6
| # Скачайте установщик с официального сайта
# https://nodejs.org/
# Проверка установки
node --version
npm --version
|
Создание проекта
1
2
3
| mkdir my-node-app
cd my-node-app
npm init -y
|
2. Основы JavaScript для Node.js
Модули
1
2
3
4
5
6
7
8
9
10
11
12
| // math.js
const add = (a, b) => a + b;
const subtract = (a, b) => a - b;
module.exports = {
add,
subtract
};
// index.js
const math = require('./math');
console.log(math.add(5, 3)); // 8
|
Асинхронное программирование
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| // Callbacks
fs.readFile('file.txt', (err, data) => {
if (err) throw err;
console.log(data);
});
// Promises
const readFile = util.promisify(fs.readFile);
readFile('file.txt')
.then(data => console.log(data))
.catch(err => console.error(err));
// Async/Await
async function readData() {
try {
const data = await readFile('file.txt');
console.log(data);
} catch (err) {
console.error(err);
}
}
|
Express.js
1. Основы Express
Установка Express
Создание сервера
1
2
3
4
5
6
7
8
9
10
| const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('Привет, мир!');
});
app.listen(3000, () => {
console.log('Сервер запущен на порту 3000');
});
|
2. Маршрутизация
Определение маршрутов
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| app.get('/users', (req, res) => {
res.json({ users: [] });
});
app.post('/users', (req, res) => {
res.status(201).json({ message: 'Пользователь создан' });
});
app.put('/users/:id', (req, res) => {
res.json({ message: 'Пользователь обновлен' });
});
app.delete('/users/:id', (req, res) => {
res.json({ message: 'Пользователь удален' });
});
|
3. Middleware
Встроенные middleware
1
2
3
| app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(express.static('public'));
|
Пользовательские middleware
1
2
3
4
5
6
| const logger = (req, res, next) => {
console.log(`${req.method} ${req.url}`);
next();
};
app.use(logger);
|
Работа с базой данных
1. MongoDB
Установка и подключение
1
2
3
4
5
6
| const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/myapp', {
useNewUrlParser: true,
useUnifiedTopology: true
});
|
Определение модели
1
2
3
4
5
6
7
| const userSchema = new mongoose.Schema({
name: String,
email: String,
age: Number
});
const User = mongoose.model('User', userSchema);
|
2. PostgreSQL
Установка и подключение
1
2
3
4
5
6
7
8
9
| const { Pool } = require('pg');
const pool = new Pool({
user: 'username',
host: 'localhost',
database: 'mydb',
password: 'password',
port: 5432,
});
|
Аутентификация и авторизация
1. JWT
Установка и использование
1
| npm install jsonwebtoken
|
1
2
3
4
5
6
7
| const jwt = require('jsonwebtoken');
const token = jwt.sign(
{ userId: user.id },
'your-secret-key',
{ expiresIn: '1h' }
);
|
2. Passport.js
Настройка аутентификации
1
| npm install passport passport-local
|
1
2
3
4
5
6
7
8
| const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
passport.use(new LocalStrategy(
(username, password, done) => {
// Проверка пользователя
}
));
|
Тестирование
1. Jest
Установка и настройка
1
| npm install --save-dev jest
|
1
2
3
4
5
6
| // math.test.js
const { add } = require('./math');
test('adds 1 + 2 to equal 3', () => {
expect(add(1, 2)).toBe(3);
});
|
2. Supertest
Тестирование API
1
| npm install --save-dev supertest
|
1
2
3
4
5
6
7
| const request = require('supertest');
const app = require('./app');
test('GET / should return 200', async () => {
const response = await request(app).get('/');
expect(response.statusCode).toBe(200);
});
|
Развертывание
1. PM2
Установка и использование
1
2
| npm install -g pm2
pm2 start app.js
|
2. Docker
Создание Dockerfile
1
2
3
4
5
6
7
| FROM node:14
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "app.js"]
|
Безопасность
1. Основные меры
Helmet
1
2
| const helmet = require('helmet');
app.use(helmet());
|
Rate Limiting
1
| npm install express-rate-limit
|
1
2
3
4
5
6
7
8
| const rateLimit = require('express-rate-limit');
const limiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15 минут
max: 100 // максимум 100 запросов
});
app.use(limiter);
|
Заключение
Node.js предоставляет мощные инструменты для создания серверных приложений. Начните с основ и постепенно изучайте более сложные концепции. Практика и работа над реальными проектами помогут вам стать опытным Node.js-разработчиком.
Полезные ресурсы