Пост

Node.js для начинающих: полное руководство по серверной разработке

Подробное руководство по Node.js для начинающих разработчиков. Узнайте основы серверной разработки, работу с Express.js, базами данных и создание REST API. Практические примеры и лучшие практики.

Node.js для начинающих: полное руководство по серверной разработке

Введение

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
npm install 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
npm install mongoose
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
npm install pg
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
npm install 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-разработчиком.

Полезные ресурсы

Авторский пост защищен лицензией CC BY 4.0 .

© Oleg Dobrynin. Некоторые права защищены.