👾
Node.js
  • 🧑‍💻Full-Stack Web Developer
  • 📚Теорія
    • 1️⃣Основи Node.js
      • Вступ
      • Модулі Node.js
      • Запуск скриптів модулів в Node.js
      • Структура проєкту, експорт-імпорт, index.js як хаб
      • Модулі CommonJS
      • Модулі MJS
      • Модулі ECMAScript
      • Модулі NPM + базові модулі
      • Глобальні змінні
      • Робота з файлами
    • 2️⃣Консольні додатки
      • Створення консольних додатків
    • 3️⃣Фреймворк Express
      • Про Express
      • Nodemon і запуски скриптів
      • Postman
      • Проміжне ПЗ middleware
      • Передача даних на сервер
      • Роутінг
      • CRUD
      • Налаштування лінтера
    • 4️⃣REST API
      • Змінні оточення
      • Логування
      • REST
      • Методи HTTP
      • CORS
      • Формування URL для REST API
      • Контроллери відсутнього роуту і непередбачуваної помилки
      • Валідація даних Joi
      • Рефакторинг додатку за MVC архітектурою
      • Express автогенератор додатку
    • 5️⃣База даних Mongo.DB
      • Основи MongoDB
      • Налаштування Mongo Atlas
      • Встановлення локальної MongoDB і основні команди
    • 6️⃣ODM Mongoose
      • Mongoose
      • Порядок планування бекенд додатку
      • чорнетка
    • 7️⃣Автентифякація WJT
      • чорнетка
      • чорнетка 2
    • 8️⃣Файли
      • чернетка
    • 9️⃣тестування
      • чернетка
    • 🔟Page 14
      • імейли
    • чорнетка докер
    • чорнетка сокети
    • додаткові матеріали
    • 👷Практика
      • 1️⃣Page 4
      • 2️⃣Page 5
      • 3️⃣Page 6
      • 4️⃣Page 7
      • 5️⃣Page 8
      • 6️⃣Page 9
  • Про мене
    • Про мене
Powered by GitBook
On this page
  1. Теорія
  2. Фреймворк Express

Про 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>");
});

Краще для маршрутів обирати прості рядки без символів.

PreviousФреймворк ExpressNextNodemon і запуски скриптів

Last updated 1 year ago

📚
3️⃣