▸ 1. Що таке Node.js?
Node.js — це середовище виконання JavaScript поза браузером, побудоване на V8 (движок Chrome). Воно дозволяє
запускати JS на сервері.
- Створене для масштабованих, високопродуктивних мережевих додатків.
- Використовує подієво-орієнтовану, неблокуючу модель I/O.
- Активно застосовується у веб-розробці, CLI-утилітах, мікросервісах.
// Перевірка версії Node.js
node -v
// Виконання JS-файлу
node app.js
Висновок: Node.js робить JavaScript універсальною мовою — і для клієнта, і для сервера.
▸ 2. Як встановити Node.js?
Існує кілька способів установки:
- З офіційного сайту: nodejs.org
-
Через пакетні менеджери:
nvm(Node Version Manager) — для Unix-подібних систем.choco(Chocolatey) — для Windows.
# Приклад з nvm
nvm install 20
nvm use 20
Рекомендація: Використовуй nvm для зручного перемикання між версіями Node.js.
▸ 3. Що таке REPL у Node.js?
REPL (Read–Eval–Print–Loop) — інтерактивне середовище Node.js для швидкого тестування коду.
// Запуск REPL
node
// Усередині REPL
> 2 + 2
4
> const x = 10;
> x * 2
20
Використання: зручно для експериментів, перевірки функцій без створення окремого файлу.
▸ 4. Чим Node.js відрізняється від браузерного JavaScript?
- У браузері JS працює з DOM, подіями, localStorage.
- У Node.js доступ до файлової системи, мережі, процесів ОС.
- У браузері немає
require/module.exports(до ES Modules). - Node.js — орієнтований на сервер і бекенд.
// У Node.js
const fs = require('fs');
fs.writeFileSync('test.txt', 'Привіт Node.js!');
// У браузері так зробити не можна
▸ 5. Що таке модулі в Node.js?
Модулі — це окремі файли з кодом, які можна підключати й перевикористовувати.
- Вбудовані:
fs,http,path. - Користувацькі: власні JS-файли.
- Зовнішні: пакети з npm.
// example.js
module.exports = function(a, b) {
return a + b;
}
// app.js
const add = require('./example');
console.log(add(2, 3)); // 5
Висновок: Модулі роблять код організованим і підтримуваним.
▸ 6. Як працює require та module.exports?
require() використовується для підключення модулів, module.exports — для експорту функцій чи об'єктів із модуля.
// math.js
module.exports.sum = (a, b) => a + b;
// app.js
const math = require('./math');
console.log(math.sum(3, 4)); // 7
Висновок: Це основа організації коду в Node.js.
▸ 7. Що таке глобальні об'єкти Node.js?
Node.js має власні глобальні об'єкти:
global— глобальний об'єкт__dirname— шлях до директорії поточного файлу__filename— повний шлях до файлуprocess— інформація про процес Node.jsconsole— вивід у консоль
console.log(__dirname);
console.log(__filename);
console.log(process.platform);
▸ 8. Що таке package.json?
package.json — файл, який описує проект Node.js, його залежності, скрипти та метадані.
{
"name": "my-app",
"version": "1.0.0",
"main": "app.js",
"scripts": {
"start": "node app.js"
},
"dependencies": {
"express": "^4.18.2"
}
}
Висновок: package.json керує всіма аспектами проекту Node.js.
▸ 9. Як запускати Node.js скрипт?
// У терміналі
node app.js
// Можна передавати аргументи
node app.js arg1 arg2
// В JS
process.argv.forEach((val, index) => {
console.log(`${index}: ${val}`);
});
▸ 10. Які типи модулів існують?
- Вбудовані модулі:
fs,http,path - Користувацькі модулі: ваші файли JS
- Зовнішні модулі: встановлені через npm
▸ 11. Що таке Node Package Manager (npm)?
npm — менеджер пакетів для Node.js, що дозволяє встановлювати бібліотеки, управляти залежностями та скриптами.
// Ініціалізація npm
npm init
// Встановлення пакета
npm install express
▸ 12. Як оновити Node.js?
- Через nvm:
nvm install latest - Через офіційний сайт Node.js
- Через пакетний менеджер ОС
▸ 13. Як перевірити версію Node.js і npm?
node -v
npm -v
▸ 14. Як підключати модулі ES6 в Node.js?
Node.js підтримує ES Modules за розширенням .mjs або при "type": "module" у package.json.
// sum.mjs
export const sum = (a, b) => a + b;
// app.mjs
import { sum } from './sum.mjs';
console.log(sum(3,4));
▸ 15. Що таке callback-функція?
Callback — це функція, яка передається як аргумент іншій функції для виконання після завершення операції.
const fs = require('fs');
fs.readFile('file.txt', 'utf8', (err, data) => {
if(err) throw err;
console.log(data);
});
▸ 16. Що таке event loop у Node.js?
Event Loop — механізм Node.js для обробки неблокуючих асинхронних операцій.
- Node.js ставить I/O операції в чергу.
- Event Loop перевіряє, коли операція завершена, і викликає відповідний callback.
▸ 17. Як працює require() caching?
Node.js кешує модулі після першого підключення.
// Модуль буде завантажений лише один раз
const mod1 = require('./mod');
const mod2 = require('./mod'); // поверне кешований об'єкт
▸ 18. Що таке __dirname та __filename?
__dirname — абсолютний шлях до поточної директорії.
__filename — абсолютний шлях до поточного файлу.
console.log(__dirname);
console.log(__filename);
▸ 19. Як працює process.env?
Process.env містить змінні оточення Node.js.
console.log(process.env.PORT || 3000);
Зручно для налаштування конфігурацій та секретів.
▸ 20. Що таке callback hell?
Callback hell — це занадто глибоко вкладені callback-функції, які погіршують читаність коду.
fs.readFile('file1', (err, data1) => {
fs.readFile('file2', (err, data2) => {
fs.readFile('file3', (err, data3) => {
console.log(data1, data2, data3);
});
});
});
Висновок: Використовуй Promises або async/await для чистішого коду.
▸ 21. Як читати файли у Node.js?
Модуль fs дозволяє читати файли синхронно або асинхронно.
// Асинхронно
const fs = require('fs');
fs.readFile('example.txt', 'utf8', (err, data) => {
if (err) throw err;
console.log(data);
});
// Синхронно
const content = fs.readFileSync('example.txt', 'utf8');
console.log(content);
▸ 22. Як записувати файли у Node.js?
const fs = require('fs');
// Асинхронно
fs.writeFile('output.txt', 'Привіт Node.js!', (err) => {
if (err) throw err;
console.log('Файл збережено!');
});
// Синхронно
fs.writeFileSync('output.txt', 'Привіт Node.js!');
▸ 23. Як додавати та видаляти пакети через npm?
# Встановити пакет локально
npm install express
# Встановити пакет глобально
npm install -g nodemon
# Видалити пакет
npm uninstall express
▸ 24. Як переглядати встановлені пакети?
# Перегляд локальних пакетів
npm list
# Перегляд глобальних пакетів
npm list -g
▸ 25. Що таке devDependencies?
devDependencies — пакети, потрібні лише для розробки (тестування, збірки), але не для продакшн.
npm install --save-dev jest
▸ 26. Як створити новий npm проект?
mkdir my-app
cd my-app
npm init
# або швидка ініціалізація
npm init -y
Це створить файл package.json з базовими налаштуваннями проекту.
▸ 27. Як підключати модулі Node.js?
// Вбудований модуль
const fs = require('fs');
// Користувацький модуль
const helper = require('./helper.js');
// Модуль з npm
const express = require('express');
▸ 28. Як працює package-lock.json?
Файл package-lock.json фіксує точні версії залежностей, щоб проект працював однаково на всіх машинах.
▸ 29. Як перевірити наявність пакета у проекті?
npm list package-name
Повертає встановлену версію пакета або повідомляє, що пакет не встановлено.
▸ 30. Як оновлювати пакети?
# Оновити всі пакети локально
npm update
# Оновити конкретний пакет
npm install express@latest
▸ 31. Що таке fs.promises?
Node.js >= 10 підтримує проміс-базований API для fs.
const fs = require('fs').promises;
async function readFile() {
const data = await fs.readFile('file.txt', 'utf8');
console.log(data);
}
readFile();
▸ 32. Як перевірити доступність файлу?
const fs = require('fs');
fs.access('file.txt', fs.constants.F_OK, (err) => {
console.log(err ? 'Файл не існує' : 'Файл існує');
});
▸ 33. Як створювати та видаляти директорії?
const fs = require('fs');
// Створити директорію
fs.mkdirSync('my-folder');
// Видалити директорію
fs.rmdirSync('my-folder');
▸ 34. Як копіювати та переміщувати файли?
const fs = require('fs');
// Копіювання
fs.copyFileSync('source.txt', 'destination.txt');
// Переміщення
fs.renameSync('old.txt', 'new.txt');
▸ 35. Що таке __dirname та process.cwd()?
__dirname — абсолютний шлях до поточної директорії файлу.
process.cwd() — робоча директорія, з якої запущено Node.js.
console.log(__dirname);
console.log(process.cwd());
▸ 36. Як видалити npm cache?
npm cache clean --force
▸ 37. Як шукати пакети в npm?
npm search express
▸ 38. Як встановлювати глобальні пакети?
npm install -g nodemon
Глобальні пакети доступні з будь-якої директорії системи.
▸ 39. Як перевірити безпеку пакета npm?
npm audit
npm audit fix
Допомагає знайти вразливості та оновити пакети безпечні версії.
▸ 40. Як створювати скрипти npm?
У package.json можна додавати власні скрипти:
{
"scripts": {
"start": "node app.js",
"test": "jest"
}
}
Запуск у терміналі: npm run start або npm run test
▸ 41. Що таке асинхронність у Node.js?
Асинхронність означає, що операції не блокують виконання коду, поки чекають на завершення I/O.
- Node.js використовує неблокуючу модель вводу/виводу.
- Це дозволяє обробляти багато запитів одночасно.
const fs = require('fs');
// Асинхронне читання файлу
fs.readFile('file.txt', 'utf8', (err, data) => {
if (err) throw err;
console.log(data);
});
console.log('Цей рядок виконується раніше, ніж завершиться readFile');
▸ 42. Що таке callback-функція?
Callback — це функція, передана як аргумент іншій функції, яка виконується після завершення операції.
function greet(name, callback) {
console.log(`Hello, ${name}`);
callback();
}
greet('Alice', () => console.log('Callback виконано!'));
▸ 43. Що таке "callback hell"?
Callback hell — це занадто глибоко вкладені callback-функції, що погіршують читаність коду.
fs.readFile('file1.txt', (err, data1) => {
fs.readFile('file2.txt', (err, data2) => {
fs.readFile('file3.txt', (err, data3) => {
console.log(data1, data2, data3);
});
});
});
Використовуй Promises або async/await для чистішого коду.
▸ 44. Що таке Promise у Node.js?
Promise — об’єкт, який представляє результат асинхронної операції.
- Може бути у стані
pending,fulfilledабоrejected.
const fs = require('fs').promises;
fs.readFile('file.txt', 'utf8')
.then(data => console.log(data))
.catch(err => console.error(err));
▸ 45. Як створити власний Promise?
const myPromise = new Promise((resolve, reject) => {
const success = true;
if (success) resolve('Успіх!');
else reject('Помилка!');
});
myPromise
.then(msg => console.log(msg))
.catch(err => console.error(err));
▸ 46. Як працює async/await?
Async/await дозволяє писати асинхронний код, як синхронний, з використанням Promises.
const fs = require('fs').promises;
async function readFile() {
try {
const data = await fs.readFile('file.txt', 'utf8');
console.log(data);
} catch (err) {
console.error(err);
}
}
readFile();
▸ 47. Як обробляти помилки у Promises?
someAsyncFunction()
.then(result => {
console.log(result);
})
.catch(err => {
console.error('Помилка:', err);
});
▸ 48. Що таке Promise.all?
Promise.all дозволяє виконати кілька Promises паралельно і отримати результат лише коли всі завершаться успішно.
const p1 = Promise.resolve(1);
const p2 = Promise.resolve(2);
Promise.all([p1, p2])
.then(results => console.log(results)); // [1,2]
▸ 49. Що таке Promise.race?
Promise.race повертає результат того Promise, який завершився першим.
const p1 = new Promise(res => setTimeout(() => res('A'), 500));
const p2 = new Promise(res => setTimeout(() => res('B'), 300));
Promise.race([p1, p2])
.then(result => console.log(result)); // B
▸ 50. Як використовувати try/catch з async/await?
async function example() {
try {
const data = await fs.readFile('file.txt', 'utf8');
console.log(data);
} catch (err) {
console.error('Помилка:', err);
}
}
example();
▸ 51. Що таке асинхронні ітерації (for await)?
Можна ітерувати асинхронні об’єкти за допомогою for await...of.
async function process(items) {
for await (const item of items) {
console.log(item);
}
}
▸ 52. Як відкладати виконання коду?
// setTimeout
setTimeout(() => console.log('Через 1 сек'), 1000);
// setImmediate
setImmediate(() => console.log('Виконується після I/O'));
▸ 53. Як відкладати повторювані задачі?
// setInterval
setInterval(() => console.log('Кожні 2 секунди'), 2000);
▸ 54. Що таке process.nextTick?
Виконує функцію одразу після поточного етапу Event Loop, перед чергами I/O.
process.nextTick(() => console.log('Виконано на наступному кроці Event Loop'));
▸ 55. Як створювати асинхронні функції з callback у fs?
const fs = require('fs');
fs.readFile('file.txt', 'utf8', function(err, data) {
if (err) throw err;
console.log(data);
});
▸ 56. Як конвертувати callback у Promise?
const fs = require('fs');
const { promisify } = require('util');
const readFileAsync = promisify(fs.readFile);
readFileAsync('file.txt', 'utf8')
.then(data => console.log(data))
.catch(err => console.error(err));
▸ 57. Що таке асинхронні ланцюги (chaining) у Promises?
Promise.resolve(1)
.then(x => x + 1)
.then(x => x * 2)
.then(result => console.log(result)); // 4
▸ 58. Як працює Promise.allSettled?
Повертає масив всіх результатів Promises, незалежно від успіху чи помилки.
const p1 = Promise.resolve(1);
const p2 = Promise.reject('error');
Promise.allSettled([p1, p2])
.then(results => console.log(results));
▸ 59. Що таке Promise.any?
Повертає результат першого успішного Promise, ігноруючи помилки.
const p1 = Promise.reject('err');
const p2 = Promise.resolve(2);
Promise.any([p1, p2])
.then(result => console.log(result)); // 2
▸ 60. Як об’єднувати async/await з try/catch?
async function run() {
try {
const data = await fs.readFile('file.txt', 'utf8');
console.log(data);
} catch(err) {
console.error('Помилка:', err);
}
}
run();
Це найчистіший та безпечний спосіб обробки асинхронного коду в Node.js.
▸ 61. Як створити простий HTTP сервер у Node.js?
const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello, Node.js!');
});
server.listen(3000, () => {
console.log('Сервер працює на http://localhost:3000');
});
▸ 62. Що таке Express.js?
Express.js — популярний фреймворк для Node.js, який спрощує створення серверів і маршрутизації.
const express = require('express');
const app = express();
app.get('/', (req, res) => res.send('Hello Express!'));
app.listen(3000, () => console.log('Сервер на порту 3000'));
▸ 63. Як обробляти маршрути в Express?
app.get('/about', (req, res) => {
res.send('Про сайт');
});
app.post('/login', (req, res) => {
res.send('Логін');
});
▸ 64. Що таке middleware в Express?
Middleware — це функції, які обробляють запити та відповіді перед маршрутом або після нього.
app.use((req, res, next) => {
console.log(`${req.method} ${req.url}`);
next(); // передає керування далі
});
▸ 65. Як підключати body-parser?
Для обробки JSON та форм у запитах.
const express = require('express');
const app = express();
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.post('/submit', (req, res) => {
console.log(req.body);
res.send('Дані отримано');
});
▸ 66. Як обробляти статичні файли?
app.use(express.static('public'));
// Тепер файли з папки public доступні напряму
// Наприклад: /public/index.html → http://localhost:3000/index.html
▸ 67. Як обробляти помилки у middleware?
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).send('Щось пішло не так!');
});
▸ 68. Як створювати маршрути з параметрами?
app.get('/user/:id', (req, res) => {
res.send(`Користувач з ID: ${req.params.id}`);
});
▸ 69. Як обробляти query-параметри?
app.get('/search', (req, res) => {
const query = req.query.q;
res.send(`Ви шукали: ${query}`);
});
▸ 70. Як обробляти POST-запити?
app.post('/login', (req, res) => {
const { username, password } = req.body;
res.send(`Логін: ${username}`);
});
▸ 71. Що таке Router в Express?
Router дозволяє розбити маршрути на модулі для кращої організації.
const router = express.Router();
router.get('/products', (req, res) => res.send('Список продуктів'));
app.use('/api', router);
// Маршрут доступний за /api/products
▸ 72. Як підключати зовнішні middleware?
const cors = require('cors');
app.use(cors()); // Дозволяє CORS для всіх маршрутів
▸ 73. Як обробляти 404 помилки?
app.use((req, res, next) => {
res.status(404).send('Сторінку не знайдено');
});
▸ 74. Як обробляти JSON у запитах?
app.use(express.json());
app.post('/data', (req, res) => {
console.log(req.body);
res.send('Отримано JSON');
});
▸ 75. Як відправляти JSON у відповіді?
app.get('/user', (req, res) => {
res.json({ name: 'Alice', age: 25 });
});
▸ 76. Як працює middleware порядок?
Middleware виконується у порядку підключення. Перший app.use → другий → маршрут → обробник помилок.
▸ 77. Як створювати власне middleware?
function logger(req, res, next) {
console.log(`${req.method} ${req.url}`);
next();
}
app.use(logger);
▸ 78. Як використовувати next() у middleware?
next() передає керування наступному middleware або маршруту.
app.use((req, res, next) => {
console.log('Перший middleware');
next();
});
app.use((req, res) => {
res.send('Другий middleware');
});
▸ 79. Як обробляти параметри маршруту у Router?
router.get('/user/:id', (req, res) => {
res.send(`Користувач ID: ${req.params.id}`);
});
▸ 80. Як організувати маршрути в окремих файлах?
Створюй модулі для кожного набору маршрутів:
// routes/users.js
const express = require('express');
const router = express.Router();
router.get('/', (req, res) => res.send('Користувачі'));
module.exports = router;
// app.js
const usersRouter = require('./routes/users');
app.use('/users', usersRouter);
▸ 81. Що таке буфери (Buffer) у Node.js?
Buffer — об’єкт для роботи з двійковими даними у Node.js.
const buf = Buffer.from('Hello');
console.log(buf); // <Buffer 48 65 6c 6f>
console.log(buf.toString()); // Hello
▸ 82. Як створювати readable streams?
const fs = require('fs');
const readStream = fs.createReadStream('file.txt', 'utf8');
readStream.on('data', chunk => console.log('Отримано chunk:', chunk));
readStream.on('end', () => console.log('Читання завершено'));
▸ 83. Як створювати writable streams?
const fs = require('fs');
const writeStream = fs.createWriteStream('output.txt');
writeStream.write('Привіт Node.js!\n');
writeStream.end('Завершено запис');
▸ 84. Як використовувати pipe між потоками?
const fs = require('fs');
const readStream = fs.createReadStream('file.txt');
const writeStream = fs.createWriteStream('copy.txt');
readStream.pipe(writeStream);
▸ 85. Що таке EventEmitter?
EventEmitter — клас для створення івентів та їх обробки.
const EventEmitter = require('events');
const emitter = new EventEmitter();
emitter.on('message', data => console.log('Повідомлення:', data));
emitter.emit('message', 'Привіт світе!');
▸ 86. Як створювати власні класи у Node.js?
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
greet() {
console.log(`Hello, I'm ${this.name}`);
}
}
const alice = new Person('Alice', 25);
alice.greet();
▸ 87. Як успадковувати класи?
class Employee extends Person {
constructor(name, age, position) {
super(name, age);
this.position = position;
}
work() {
console.log(`${this.name} працює на посаді ${this.position}`);
}
}
const bob = new Employee('Bob', 30, 'Developer');
bob.greet();
bob.work();
▸ 88. Як працювати з подіями класів?
const EventEmitter = require('events');
class MyClass extends EventEmitter {
doSomething() {
this.emit('done', 'Завершено!');
}
}
const obj = new MyClass();
obj.on('done', msg => console.log(msg));
obj.doSomething();
▸ 89. Як відслідковувати memory leaks?
Використовуй process.memoryUsage() та профайлери Node.js:
console.log(process.memoryUsage());
▸ 90. Як працювати з потоками у великих файлах?
Streams дозволяють обробляти файли без завантаження всього у пам’ять.
const fs = require('fs');
const readStream = fs.createReadStream('bigfile.txt');
readStream.on('data', chunk => console.log('chunk length:', chunk.length));
▸ 91. Як шифрувати дані у Node.js?
const crypto = require('crypto');
const hash = crypto.createHash('sha256').update('password').digest('hex');
console.log(hash);
▸ 92. Як працювати з TLS/HTTPS?
const https = require('https');
const fs = require('fs');
const options = {
key: fs.readFileSync('key.pem'),
cert: fs.readFileSync('cert.pem')
};
https.createServer(options, (req, res) => {
res.writeHead(200);
res.end('Hello HTTPS!');
}).listen(443);
▸ 93. Як захищати сервер від XSS та ін’єкцій?
Використовуй пакети типу helmet та валідаторів вводу:
const helmet = require('helmet');
app.use(helmet());
▸ 94. Як обмежувати кількість запитів (rate limiting)?
const rateLimit = require('express-rate-limit');
const limiter = rateLimit({
windowMs: 15 * 60 * 1000,
max: 100
});
app.use(limiter);
▸ 95. Як кешувати дані у Node.js?
Можна використовувати пам’ять, Redis або інші кеші:
const cache = new Map();
cache.set('key', 'value');
console.log(cache.get('key'));
▸ 96. Як профілювати performance?
node --inspect app.js
# Відкрити Chrome DevTools → профілювання CPU та пам’яті
▸ 97. Як працювати з child processes?
const { exec } = require('child_process');
exec('ls -la', (err, stdout, stderr) => {
if (err) console.error(err);
console.log(stdout);
});
▸ 98. Як обробляти uncaught exceptions?
process.on('uncaughtException', err => {
console.error('Помилка:', err);
});
▸ 99. Як обробляти unhandledRejection?
process.on('unhandledRejection', reason => {
console.error('Unhandled Rejection:', reason);
});
▸ 100. Як оптимізувати Node.js для високого навантаження?
- Використовуй кластеризацію (
cluster) для багатоядерних CPU. - Оптимізуй асинхронний код і мінімізуй блокуючі операції.
- Використовуй кешування та CDN для статичних файлів.
- Використовуй профайлери та моніторинг для виявлення вузьких місць.