Просто обяснение на Middleware в JavaScript

Въведение

Ако сте работили с Express.js или друга модерна уеб рамка, може да сте чували за термина Middlewares. В този блог ще обсъдим термина мидълуер, как се използва мидълуер и какви са неговите случаи на използване.

Какво е междинен софтуер?

Мидълуерът действа като мост, улеснявайки безпроблемния обмен на информация между различните части на приложението. Той осигурява слой от функционалност, който се намира между два компонента, прихващайки заявки и разрешавайки модификации или подобрения, преди да достигнат крайната си дестинация.

Представете си натоварен ресторант, където поръчките трябва да преминат през множество станции, преди да стигнат до масата на клиента. Главният готвач приготвя ястието, сервитьорът добавя гарнитури, а касиерът гарантира получаването на плащането. По същия начин мидълуерите в JavaScript приложенията се справят със специфични задачи и предават щафетата на следващия мидълуер по ред или крайната крайна точка.

За да разберем същността на междинния софтуер, нека разгледаме сценарий за обработка на HTTP заявки. Когато клиент изпрати заявка до сървър, той преминава през няколко етапа, преди да генерира отговор. Мидълуерът влиза в картината в този решаващ кръстовище, прихващайки заявката и извършвайки специфични действия или модификации, преди да достигне желаната дестинация, като манипулатор на маршрут или крайна точка.

Как да внедрим междинен софтуер?

Ето пример за проста функция на междинен софтуер, която регистрира метода и URL адреса на входящата заявка.

const express = require('express');
const app = express();

app.use((req, res, next) => {
  console.log(`Received ${req.method} request at ${req.url}`);
  next();
});

// Route handlers
app.get('/', (req, res) => {
  res.send('Hello, world!');
});

app.listen(3000, () => {
  console.log('Server is listening on port 3000');
});

В този пример функцията app.use() регистрира функцията на междинния софтуер, която регистрира информацията за заявката и след това извиква next(), за да прехвърли контрола на следващия междинен софтуер във веригата или манипулатора на маршрута.

Сега ще видим как можем да създадем наш собствен междинен софтуер, нека разгледаме типичен пример за удостоверяване, при който потребителят трябва да бъде удостоверен преди достъп до каквито и да било маршрути или ресурси.

const express = require('express');
const app = express();

// Middleware for authentication
const authenticate = (req, res, next) => {
  // Check if user is authenticated
  if (req.isAuthenticated()) {
    // User is authenticated, proceed to the next middleware or route handler
    return next();
  }

  // User is not authenticated, redirect to the login page
  res.redirect('/login');
};

// Protected route
app.get('/dashboard', authenticate, (req, res) => {
  res.send('Welcome to the dashboard!');
});

// Login route
app.get('/login', (req, res) => {
  res.send('Please login');
});

// Simulating user authentication
app.post('/login', (req, res) => {
  // Perform authentication logic
  // ...

  // Set the user as authenticated 
  // (using a hypothetical isAuthenticated() function)
  req.isAuthenticated = true;

  // Redirect to the dashboard
  res.redirect('/dashboard');
});

app.listen(3000, () => {
  console.log('Server is listening on port 3000');
});

Тук функцията на междинния софтуер authenticate проверява дали потребителят е удостоверен, преди да разреши достъп до защитения /dashboard маршрут. Функцията на междинния софтуер получава параметрите req, res и next, както е конвенцията за Express междинния софтуер.

Във функцията authenticate проверяваме дали потребителят е удостоверен с помощта на хипотетична функция isAuthenticated(). Ако потребителят е удостоверен, извикваме next(), за да продължим към следващия междинен софтуер или манипулатор на маршрут във веригата. В противен случай ние пренасочваме потребителя към страницата за вход с помощта на res.redirect('/login').

Този пример демонстрира как междинният софтуер може да се използва за удостоверяване в уеб приложение. Чрез включването на междинния софтуер authenticate в дефиницията на маршрута ние гарантираме, че само удостоверени потребители имат достъп до защитения маршрут, докато неоторизираните потребители се пренасочват към страницата за вход.

Мидълуерът може да се използва и за обработка на грешки. Ето един пример, който улавя грешки и изпраща подходящ отговор за грешка на клиента.

const errorHandler = (err, req, res, next) => {
  console.error(err);
  res.status(500).send('Internal Server Error');
};

app.use(errorHandler);

// Route handler that throws an error
app.get('/error', (req, res, next) => {
  const error = new Error('Something went wrong');
  next(error);
});

В този пример функцията на междинния софтуер errorHandler е регистрирана с помощта на app.use(). Всеки път, когато възникне грешка в който и да е междинен софтуер или манипулатор на маршрут, тя се предава на тази функция на междинния софтуер, която регистрира грешката и изпраща общ отговор за грешка с код на състоянието 500.

Къде се използва междинен софтуер?

  1. Удостоверяване и оторизация: Мидълуерът често се използва за обработка на автентификация и оторизация в уеб приложения. Той може да прихваща входящи заявки, да проверява потребителските идентификационни данни и да предоставя или отказва достъп до защитени маршрути или ресурси въз основа на правила за оторизация.
  2. Регистриране и отстраняване на грешки при заявки: Мидълуерът може да регистрира важна информация за входящи заявки и изходящи отговори, като метод на заявка, URL, заглавки и времеви клейма. Това помага при отстраняване на грешки, наблюдение на активността на приложението и одит.
  3. Обработка на грешки: Мидълуерът играе решаваща роля при обработката на грешки. Той може да улавя и обработва грешки, които възникват по време на цикъла заявка-отговор, да генерира подходящи отговори за грешки и да регистрира подробна информация за грешки за целите на отстраняване на грешки.
  4. Управление на сесии и бисквитки: Мидълуерът може да се справи с управлението на сесиите чрез настройване и управление на сесийни бисквитки, поддържане на данни от сесиите и осигуряване на постоянство на потребителското състояние при множество заявки.

Това са малкото случаи на използване на Middleware в JavaScript. Гъвкавостта на междинния софтуер позволява широк спектър от случаи на употреба, позволявайки на разработчиците да подобрят функционалността на приложенията, да разделят проблемите и да изграждат стабилен и разширяем софтуер.

Заключение

Мидълуерът играе решаваща роля в приложенията на JavaScript, предлагайки множество предимства, които подобряват функционалността, модулността и разширяемостта. Способността му да прихваща заявки, да модифицира данни и да улеснява комуникацията между компонентите позволява на разработчиците да създават модулен, многократно използваем и много адаптивен код. Използвайки силата на междинния софтуер, разработчиците могат да рационализират разработката, да подобрят качеството на кода и да подобрят функционалността на своите приложения.

Това беше всичко за този блог 🙏, насърчавам ви да проучите повече неговата „документация“, „уроци“ и ресурсите, достъпни онлайн.

Надявам се да ви е харесало. Коментирайте с вашите мисли за този блог.

Ако сте редовен читател, благодаря ви, вие сте голяма част от причината, поради която успях да споделя наученото с вас.

Можете да се свържете с мен в Twitter и LinkedIn.

Последвайте ме за още такива блогове 😊.

Приятно кодиране✌️!!