Про Express
Express - фреймворк для Node.js, який містить функції для мобільних та веб-застосунків. Має у своєму наборі службові методи HTTP та проміжні обробники, щоб створити API або вебсайт.
Для початку потрібно створити директорію проєкту й ініціалізувати його.
npm init -y
Після того, як створиться файл package.json, можна встановлювати залежності, зокрема express.
npm i express
Тепер створимо файл index.js і під'єднати мінімальну конфігурацію сервера.
// підключення бібліотеки експресс
const express = require("express");
// створюємо сервер (app)
const app = express();
// створення GET-запиту і відправка відповіді при його отриманні
app.get('/', (req, res) => {
res.send('Hello World!');
});
// піднімаємо (запускаємо) сервер
// в метод listen передаємо першим параметром порт
// другий параметр - колбек-функція, яка буде виконуватися
app.listen(3000, () => {
console.log("Server is up and runned on port 3000");
});
Програма запускає сервер та слухає з'єднання на порті 3000.
node index.js
Створений застосунок повертає у браузері відповідь 'Hello World!' по кореневому URL(/).
http://localhost:3000/
http://127.0.0.1:3000/

Для всіх інших маршрутів відповідь буде 404 - Not Found.

У фреймворка Express є вбудовані функції, які обробляють запити. В залежності від вказаного маршрута (URL) можна сформувати різну відповідь. Кожен маршрут може мати одну або більше функцій обробки.
Структура маршруту за документацією:
app.METHOD(PATH, HANDLER)
app - це екземпляр express програми.
METHOD - метод запиту HTTP (GET, POST, PUT, PATCH, DELETE).
PATH - шлях на сервері, у нашому прикладі вище - це корінь сайту '/'.
HANDLER - функція, яка виконується, якщо маршрут збігається.
Методи запиту HTTP:
GET - робить запит на отримання даних.
POST - надсилає дані до ресурсу. Часто спричиняє зміни станів на сервері.
PUT - замінює всі поточні дані на ресурсі.
DELETE - видаляє вказаний ресурс.
PATCH - використовують для часткової зміни ресурсу.
Це так звані CRUD-операції. Тобто: create (створити), read (прочитати), update (оновити), delete (видалити).
Функція HANDLER приймає щонайменше два параметри. Перший - обʼєкт запиту (request), другий - обʼєкт відповіді (response). Назвати їх можна як завгодно, тільки потрібно дотримуватися їх порядку. Загальноприйнято їх називати req i res.
(req, res) => {
res.send('Hello World!');
}
Для запуску сервера викликають метод app.listen(), до якого передають номер порту і анонімну колбек-функцію, яка виконається при старті запуску сервера.
app.listen(3000, () => {
console.log("Server is up and runned on port 3000");
});
Запустимо скрипт і подивимося, що відповість консоль:

Express відпрацює запит, тільки якщо є збіг з відповідним шляхом (endpoint) вказаному на сервері. інакше отримаємо помилку. Приміром спробуємо отримати відповідь із сервера за таким запитом:
http://localhost:3000/ping

Додамо обробник маршруту ping:
app.get("/ping", (req, res) => {
res.status(201).send("<h1>Hello from Express</h1>");
});

У прикладі вище у відповідь на запит ми передаємо цілий html-тег, а також статус обробки запиту за допомогою методу status(). Статус можна перевірити в панелі розробника у вкладниці Network.

Можна також, наприклад примусово повернути тільки статус без будь-яких даних. Це роблять за допомогою методу sendStatus().
app.get("/ping", (req, res) => {
res.sendStatus(404);
});

А можна повернути на запит json за допомогою методу
app.get("/ping", (req, res) => {
res.status(200).json({
msg: "pong",
});
});

Регулярні вирази та символьні підстановки у маршрутах запитів
Наступний функціонал краще не використовувати, для уникнення програмних збоїв, але знати про таку можливість потрібно.
У маршрутах, крім простих рядків, можна використовувати регулярні вирази чи спеціальні символи підстановок. Зокрема, можна використовувати такі символи: ?, +, * та ().
Символ ? у маршруті вказує, що попередній символ може зустрічатися 1 раз або відсутній. Наведений нижче шлях маршруту зіставляє png та ping.
app.get("/pi?ng", (req, res) => {
res.status(201).send("<h1>Hello from Express</h1>");
});
Символ + вказує, що попередній символ може зустрічатися 1 і більше разів. Цей шлях маршруту зіставляє ping, piing, piiing і т.д.
app.get("/pi+ng", (req, res) => {
res.status(201).send("<h1>Hello from Express</h1>");
});
Символ * вказує, що на місці цього символу може бути будь-яка кількість символів. Цей шлях маршруту зіставляє ping, pilling, pircing і т.д.
app.get("/pi*ng", (req, res) => {
res.status(201).send("<h1>Hello from Express</h1>");
});
Last updated