Розгортання Node.js додатку на Amazon EC2 за допомогою PM2, Nginx та SSL

pic

У цьому посібнику ми розглянемо процес розгортання Node.js додатка на інстансі Amazon EC2 (Amazon Linux). Ми будемо використовувати PM2 для керування додатком, налаштуємо Nginx як зворотний проксі та забезпечимо додаток SSL сертифікатом. Крім того, ми вкажемо піддомен, який буде вказувати на публічну IP-адресу інстансу EC2.

Попередні вимоги

  • Наявність облікового запису в AWS з доступом для запуску інстансів EC2.
  • Зареєстроване доменне ім’я.
  • Базові знання команд Linux.

Крок 1: Запуск інстансу EC2 та призначення Elastic IP

  1. Увійдіть в консоль управління AWS.
  2. Перейдіть до панелі керування EC2 та запустіть новий інстанс Amazon Linux 2.
  3. Призначте Elastic IP для інстансу для отримання статичної публічної
Читати далі

Розуміння залежностей Node.js та пулу потоків

Node.js — потужне середовище виконання, але чи замислювались ви коли-небудь, як воно так ефективно обробляє задачі? Вся справа в кількох ключових залежностях та концепціях, завдяки яким Node.js швидкий, не блокуючий та орієнтований на події. Давайте розберемося!

pic

Основні залежності в Node.js

Node.js спирається на кілька важливих залежностей для виконання різних задач:

  1. V8 Engine: Це JavaScript-двигун, який компілює ваш код у машинний код, дозволяючи йому виконуватись на системі.
  2. libuv: Потужна бібліотека з відкритим вихідним кодом, написана на C++, яка обробляє асинхронні операції вводу/виводу (I/O). Вона надає доступ до файлової системи, мережі та іншого. libuv також відповідає за керування циклом подій
Читати далі

🚀 IIFE (Функція, що негайно викликається)

pic

IIFE (Immediately Invoked Function Expression) — це анонімна функція, яка виконується відразу після того, як вона була визначена. Основною причиною використання IIFE є створення ізольованого простору (scope), що запобігає потраплянню змінних або функцій у глобальний простір.

📚 Технічне пояснення

В JavaScript, коли ми оголошуємо функції чи змінні в глобальному просторі, вони стають доступними з будь-якої частини коду. Це може призвести до конфліктів, особливо у великих проєктах.

IIFE вирішує цю проблему за допомогою:

  1. Створення власного простору (scope): Змінні та функції всередині нього не впливають на глобальний простір.
    2.
    Виконується автоматично: Немає потреби викликати функцію окремо, вона запускається відразу після того, як
Читати далі

Створення кастомного збереження Multer для завантаження файлів в S3 за допомогою Node.js

Коли працюєш з завантаженням файлів у Node.js, Multer часто є стандартним посередником. За замовчуванням Multer пропонує два механізми збереження:

pic

Джерело коду Multer

  1. DiskStorage: Зберігає файли на локальному диску сервера.
  2. MemoryStorage: Тимчасово зберігає файли в пам'яті як об'єкти Buffer.

Хоча ці опції є достатніми для багатьох випадків, вони можуть бути не зовсім підходящими для сценаріїв, коли потрібно:

  • Зберігати файли безпосередньо в хмарному сховищі (наприклад, AWS S3, Google Cloud Storage тощо).
  • Використовувати власну логіку чи робочий процес для обробки файлів, як-от правила іменування чи динамічний вибір сховища.

Тут на допомогу приходять кастомні механізми збереження. Multer дозволяє розробникам визначати власні … Читати далі

API управління контентом Contentful (CMA): Масова завантаження та оновлення контенту

pic

Contentful, як платформа для управління контентом (CMS), пропонує надзвичайно гнучкий підхід для створення, управління та доставки контенту через різні канали. Для взаємодії з інформацією, що зберігається в Contentful, платформа надає кілька API, які відповідають різним потребам, від простих запитів до управління даними. У цій статті ми розглянемо різні способи роботи з інформацією в Contentful і зосередимося на використанні Content Management API (CMA), ідеальної для маніпулювання даними через проект Node JS.

Різні способи взаємодії з Contentful

  1. Content Delivery API (CDA):
    CDA — це найбільш використовувана API для споживання опублікованого контенту. Вона ідеально підходить для фронтенд-застосунків, які мають відображати контент для
Читати далі

Навчання шаблонам проектування: Розуміння шаблону адаптера для забезпечення сумісності

Шаблон "Адаптер" є структурним шаблоном проєктування, який дозволяє об'єктам з несумісними інтерфейсами працювати разом безперешкодно. Він виступає в ролі моста, що дає змогу компонентам, які зазвичай не можуть взаємодіяти, спілкуватися між собою.

У цій статті ми розглянемо шаблон "Адаптер", використовуючи поширений і зрозумілий приклад розеток і вилок. Ви дізнаєтесь його визначення, мету, реальні приклади застосування та як реалізувати його в TypeScript.

Зміст

  1. Визначення шаблону "Адаптер"
  2. Сценарій: розуміння проблеми
  3. Реальні проєкти, що використовують шаблон "Адаптер"

1. Визначення шаблону "Адаптер"

Шаблон "Адаптер" дозволяє класам з несумісними інтерфейсами співпрацювати, вводячи проміжний об'єкт — адаптер, який перетворює один інтерфейс в інший.
Цей шаблон зручний, … Читати далі

Свободи JavaScript: Як TypeScript рятує ситуацію

pic

Виправлення помилок може бути досить розчаровуючим, але без сумніву, це завжди цінний досвід навчання! Наразі я вдосконалюю свої знання з React, і слідуючи одному з туторіалів, працюю над простим додатком для списку покупок. Спочатку здавалося, що це незначна помилка, але вона навчила мене важливості безпеки типів і послідовності даних.

Проблема: Чому "1" конкатенувалося замість того, щоб додаватися?

Я реалізував функцію addItem, яка призначала новий id кожному елементу в моєму списку, базуючись на найвищому існуючому значенні id.

Як ви можете побачити, логіка була досить простою, але JavaScript, як завжди:

const addItem = (item) => {  
 const id = items.length 
Читати далі

Розуміння this у JavaScript: Стрілкові функції проти звичайних функцій

pic

Коли працюєш з JavaScript, однією з найпоширеніших причин непорозумінь є поведінка ключового слова this. Це питання стає ще складнішим, коли порівнювати стрілкові функції (arrow functions) і звичайні функції (regular functions). Розуміння того, як працює this в цих двох типах функцій, є ключовим для написання чистого та безпомилкового коду.

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

Ключова різниця: Лексичне vs. Динамічне прив’язування

Стрілкові функції лексично прив’язують this

Стрілкові функції не мають свого власного this. Натомість вони успадковують this від навколишнього лексичного контексту — місця, де … Читати далі

Вступ до QIKS

User has worked on a caching library project called QIKS.Як розробник, я завжди радий створювати нові інструменти, які поєднують силу простоти з гнучкістю для вирішення реальних проблем. Протягом останніх кількох місяців я працював над різними інструментами, що охоплюють різні аспекти розробки. Наприклад, я створив Gland, легкий фреймворк, натхнений Express, та MD-Logger, просту і ефективну бібліотеку для ведення журналів. Також я працював над проектами, такими як TideityIQ (tdq), щоб досліджувати нові способи підвищення продуктивності та ефективності.

Але після майже тижня спроб кодування та кількох місяців досліджень технік кешування, я радий представити мій останній проект: QIKS!

QIKS … Читати далі

Дослідження рекурсивних запитів SQL: Робота з ієрархічними даними

pic

Рекурсивні запити SQL дозволяють працювати з ієрархічними або рекурсивними структурами даних, такими як організаційні схеми, дерева категорій або родові генеалогії. Використовуючи Загальні Табличні Вирази (CTE), рекурсивні запити дозволяють ефективно обходити і маніпулювати даними з батьківсько-дитячими відносинами.

У цій статті ми розглянемо, що таке рекурсивні запити, їх синтаксис та практичні приклади роботи з ієрархічними даними.

Що таке рекурсивні запити SQL?

Рекурсивний запит — це запит, який посилається на сам себе для обробки ієрархічних або рекурсивних даних. Такі запити створюються за допомогою рекурсивних Загальних Табличних Виразів (CTE), які складаються з двох частин:

  1. Якорний запит: Початковий запит, який отримує базовий
Читати далі