Я собираюсь сравнить два фреймворка (предупреждение о спойлере: я не буду говорить вам, какой из них лучше, потому что я не думаю, что есть лучший фреймворк. Я добавил репозиторий 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