Про Express

Express - фреймворк для Node.js, який містить функції для мобільних та веб-застосунків. Має у своєму наборі службові методи HTTP та проміжні обробники, щоб створити API або вебсайт.

Для початку потрібно створити директорію проєкту й ініціалізувати його.

terminal
npm init -y

Після того, як створиться файл package.json, можна встановлювати залежності, зокрема express.

terminal
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.

terminal
node index.js

Створений застосунок повертає у браузері відповідь 'Hello World!' по кореневому URL(/).

browser
http://localhost:3000/
browser
http://127.0.0.1:3000/

Aдреса локального сервера localhost - 127.0.0.1 Але погодьтесь, що словами краще писати і легше запамʼятати.

Для всіх інших маршрутів відповідь буде 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) вказаному на сервері. інакше отримаємо помилку. Приміром спробуємо отримати відповідь із сервера за таким запитом:

browser
http://localhost:3000/ping

Додамо обробник маршруту ping:

app.get("/ping", (req, res) => {
res.status(201).send("<h1>Hello from Express</h1>");
});

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

Не забувайте перезапустити сервер, щоб побачити зміни у коді.

node index.js

Можна також, наприклад примусово повернути тільки статус без будь-яких даних. Це роблять за допомогою методу 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