Я собираюсь сравнить два фреймворка (предупреждение о спойлере: я не буду говорить вам, какой из них лучше, потому что я не думаю, что есть лучший фреймворк. Я добавил репозиторий github с примерами).

На самом деле пользователь сам должен определить, какой фреймворк лучше.

Hapi поставляется с большим количеством готовых функций по сравнению с Express, что означает, что он содержит больше кода, который может быть хорошим или плохим в зависимости от того, что вы ищете.
При сравнении двух фреймворков по строкам кода Express имеет всего 16 926 строк, а Hapi — 30 914 строк — почти вдвое больше (это ничего не значит, но все же).

Экосистема
При использовании Hapi вы, скорее всего, будете использовать Joi, Lout, Wreck и т. д. Это преимущество Hapi перед Express. Наличие белого списка пакетов, которые вы можете использовать, может сделать ваше приложение более производительным и безопасным.

Доверять случайным пакетам узлов рискованно! Это может привести к множеству проблем и, самое главное, к незащищенному приложению. У Express нет этой экосистемы, которая может быть рискованной с точки зрения безопасности и передовой практики.
Тем не менее, Express предлагает вам гибкость, чтобы делать все, что вы хотите, хорошо это или плохо.

Плагины VS MiddleWare
При использовании Hapi вы в основном определяете маршруты и плагины (некоторые могут возразить, что вы должны использовать только плагины, поскольку они могут действовать как маршрут). Плагины регистрируются сервером и могут зависеть друг от друга.

Плагин Hapi позволяет разбить ваш код на небольшие изолированные сервисы, где каждый из плагинов отвечает за определенную бизнес-логику. Это очень полезно, когда вы делитесь своим кодом с различными сервисами.

// load multiple plugins (server file)
server.register([require(‘myplugin’), require(‘yourplugin’)], (err) => {
 if (err) {
 console.error(‘Failed to load a plugin:’, err);
 }
});
// myplugin.js - each plugin should export a `register` function and `attributes`
'use strict';
exports.register = function (server, options, next) {
    next();
};
exports.register.attributes = {
    pkg: require('./package.json')
};

С другой стороны, Express использует промежуточное программное обеспечение, которое представляет собой последовательность функций, выполняя обратный вызов, вызывающий следующую функцию.

//server.js
const express = require(‘express’);
const mw = require(‘./mw’);
const app = express(); 
app.get(‘/’, 
mw.checkForAuthentication, 
mw.logSomething, (req, res) => { 
 res.send(‘Hello World’);
});
//mw.js
module.exports = {
  checkForAuthentication: (req, res, next) => {
    // Check for user authentication and call next 
    next();
  },
  logSomething: (req, res, next) => {
    console.log(req.path);
    next();
  }
};

В приведенном выше примере легко увидеть, как Express выполняет промежуточное ПО по порядку. При поступлении запроса [GET] / mw.checkForAuthentication выполнить, а затем mw.logSomething и после этого вызвать res.send.
Это выглядит просто, но требует внимания и самодисциплины при создании большого приложения.

События
Hapi имеет встроенную систему событий, это отличный способ запуска событий по запросу, предварительной аутентификации и т. д.

Безопасность
Наличие белого списка пакетов и подключаемых модулей, которые вы можете использовать с Hapi, делает его намного более безопасным, когда существует множество пакетов. Важность экосистемы действительно становится очевидной, когда речь идет о безопасности.

Давайте сравним два приложения с домашней страницей и логином. Я буду использовать файл json, чтобы имитировать нашу базу данных пользователей.

Пример
Я создал этот репозиторий для сравнения двух фреймворков, простое приложение с аутентификацией. Я использовал `ejs` в качестве механизма шаблонов, так как большинство людей знакомы с ним.

Резюме
Я хотел бы начать с того, что обе платформы великолепны, и стоит отметить, что в обе платформы были вложены огромные усилия.
Что следует использовать? это действительно зависит ... если вы новичок и чувствуете себя более комфортно с экспрессом, просто используйте его! создайте свой MVP, и когда вы получите больше опыта, вы можете начать изучать Hapi.js, который является более надежным и дает больше возможностей разработчикам, что затрудняет обучение.

Почему Hapi.js, если вы руководите командой, группой или техническим директором компании, вы хотите использовать такую ​​платформу, как Hapi.js. Hapi дает разработчикам структуру того, как должно выглядеть приложение и где что должно жить. Переключаться между двумя приложениями hapi в 10 раз проще, чем переключаться между экспресс-приложениями, благодаря свободе и отсутствию структуры, которую экспресс дает своим разработчикам.
Другим хорошим моментом являются плагины. Hapi позволяет превратить ваше приложение в небольшой плагин, и при необходимости вы можете просто разбить их на пакет, опубликовать его в npm и использовать в нескольких сервисах.

Если вы найдете это полезным или вам понравится, пожалуйста, нажмите на сердечко, это даст вам немного энергии, чтобы продолжать писать лучший контент, спасибо!

  • Дорон :)

Для получения дополнительных сообщений оформите заказ в мой блог

Репозиторий Github: https://github.com/doron2402/express-vs-hapi