Робота з сервером
1. Створення HTTP-серверів
Node.js дозволяє створювати власні веб-сервери без зовнішніх залежностей.
javascript
const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Hello from Node.js server!');
});
server.listen(3000, () => {
console.log('Server running at http://localhost:3000');
});Що це означає:
- Ви можете обробляти запити та відповіді напряму.
- Повний контроль над заголовками, статусами, маршрутами тощо.
- Легко реалізувати REST API, GraphQL API або WebSocket-сервер.
2. Робота з мережею (TCP, UDP, HTTPS)
Модуль net дозволяє створювати низькорівневі TCP/UDP-сервери:
javascript
const net = require('net');
const server = net.createServer(socket => {
socket.write('Connected to TCP server');
socket.on('data', data => console.log('Received:', data.toString()));
});
server.listen(8080);- Підтримка протоколів TCP/UDP
- Можливість робити проксі, чат-сервери, потокову передачу даних
3. HTTPS та SSL/TLS
Node.js дозволяє створювати захищені HTTPS-сервери:
javascript
const https = require('https');
const fs = require('fs');
const options = {
key: fs.readFileSync('private.key'),
cert: fs.readFileSync('certificate.crt')
};
https.createServer(options, (req, res) => {
res.end('Secure connection established');
}).listen(443);- Підтримка SSL/TLS-сертифікатів
- Можна створювати безпечні REST API та вебсервіси
4. Робота з файловою системою (fs)
Node.js має вбудовані функції для читання, запису й потокової обробки файлів:
javascript
const fs = require('fs');
// Читання файлу
fs.readFile('data.txt', 'utf8', (err, data) => console.log(data));
// Запис файлу
fs.writeFileSync('output.txt', 'Server log data');Це важливо для:
- логування,
- зберігання даних,
- роботи із шаблонами та статичними файлами.
5. Робота з процесами та системою (os, process, child_process)
Node.js може взаємодіяти з операційною системою:
-
Отримувати інформацію про сервер:
javascriptconst os = require('os'); console.log(os.cpus(), os.freemem()); -
Запускати зовнішні команди:
javascriptconst { exec } = require('child_process'); exec('ls', (err, stdout) => console.log(stdout)); -
Керувати змінними середовища та потоками введення-виведення
6. Маршрутизація та API (через фреймворки)
Node.js можна розширити фреймворками:
- Express.js - створення REST API
- NestJS - модульна архітектура для складних серверів
- Fastify - високопродуктивні сервери
- Hapi, Koa - альтернативи для специфічних задач
Приклад Express.js:
javascript
const express = require('express');
const app = express();
app.get('/users', (req, res) => res.json([{ id: 1, name: 'John' }]));
app.listen(3000);7. Робота з базами даних
Node.js підтримує роботу практично з усіма типами БД:
| Тип | Приклади бібліотек |
|---|---|
| SQL | pg (PostgreSQL), mysql2, sequelize, prisma |
| NoSQL | mongoose (MongoDB), redis, couchdb |
| In-memory | redis, sqlite |
8. Реальний час і WebSocket
Node.js ідеально підходить для реального часу:
javascript
const { Server } = require('socket.io');
const io = new Server(3000);
io.on('connection', socket => {
console.log('Client connected');
socket.emit('message', 'Welcome!');
});Можна робити:
- онлайн-чати
- ігрові сервери
- трекінг у реальному часі
- сповіщення та live-оновлення
9. Асинхронність і масштабованість
- Node.js використовує event loop та асинхронні операції - він не блокує потік.
- Можна обробляти тисячі з'єднань одночасно.
- Підтримує кластеризацію (модуль
cluster) - розподіл навантаження по ядрах CPU.
Підсумок
| Можливість | Node.js вміє |
|---|---|
| Створення HTTP/HTTPS-серверів | Так |
| Обробка TCP/UDP з'єднань | Так |
| Робота з файлами | Так |
| Асинхронні операції | Так |
| Робота з базами даних | Так |
| Веб-сокети та real-time | Так |
| Мікросервіси, REST, GraphQL | Так |
| Розширення через npm-пакети | Так |
Коротка відповідь
Для співбесідиPremium
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.