Executando verificação de segurança...
3

[ Dúvida ] Express.js, Hono, Fastify e Nest.js. Quais são seus papeis no ecossistema do Node.js?

Introdução:

Recentemente tenho avançado em meus estudos com Node.js com vários pequenos projetos testados localmente, e chegou a hora de escolher um framework e começar criar aplicações mais completas.

Após uma breve pesquisa, encontrei express.js e nest.js, e ao olhar outras fontes encontrei o Hono e o fastify.

Dúvida:

A questão é que, após ler um pouco da documentação de cada um, praticamente todos se apresentam da mesma forma, sendo uma solução para web.

Dentre todos esses, o que mais encontrei conteúdo foi sobre express.js, então julgo ser o mais popular, porém não sei o que ele tem de melhor em relação aos outros três.

O mais diferente, foi o nest.js, que deixou enfatizado seu foco no server-side. Algo parecido com o Next.js, talvez?

Tirando estes dois, os outros se apresetam basicamente da mesma forma que o express.js. Ah, o hono me pareceu no quisito modernidade. Parece ser algo mais recente, com o foco nos padrões atuais da web.

Com isso, venho perguntar aos mais experientes. No geral, qual é a particularidade desses framewords em relação aos outros?

Meu objetivo é apenas aprender no momento. Então vou escolher o express.js por aparentar ter mais conteúdo, mas no futuro pretendo atuar como profissional full-stack, e quero conhecer as ferramentas certas para o problema certo.

Carregando publicação patrocinada...
3

Essas bibliotecas servem para você conseguir gerenciar rotas, de forma geral. Receber uma requisição HTTP e respondê-la. Infelizmente, em JavaScript temos muitas bibliotecas que fazem as mesmas coisas porque alguém queria algo "um pouco diferente" ou blazingly fast.

O Express talvez seja o mais antigo (não pesquisei), e quase não tem atualizações. É uma biblioteca bem madura e simples. Já foi muito usada, e isso significa que muito sofware em produção hoje usa o Express por causa de uma decisão de cinco anos atrás. Eu já usei (e ainda uso), e ele cumpre bem seu propósito.

Existem outros que vieram para tentar "destronar" o Express, como o Koa, mas se você for ver no NPM, é uma diferença de 32 milhões de downloads semanais do Express contra 2 milhões do Koa. Claramente o Koa não é pequeno, mas veja o tamanho do Express.

O NestJS é opinado. É inspirado no Angular, e já ouvi falar que por causa disso o pessoal que vem de outras linguagens (como Java) tende a se dar melhor com ele. É um framework que encapsula o Express. Eu não cheguei a usar o NestJS porque me pareceu trazer mais complicações do que o necessário (vi o NestJS em alguns vídeos da Rocketseat).

Hono é mais um concorrente, bem mais novo. Não conheço direito para comentar sobre.

Se for trabalhar num projeto simples, acredito que o NestJS seja coisa demais. Acho interessante usar algo simples de substituir, mesmo que você nunca precise. Isso por si só já signfica que o desenvolvedor não precisa aprender "a biblioteca" para trabalhar no projeto.

Se for trabalhar num projeto grande, me parece arriscado usar algo novo como o Hono.

Recentemente experimentei o Bun para um projeto simples, e não precisei nem mesmo do Express, só usei o Bun.serve e ifs para gerenciamento das rotas. Mas, quando fiz uma versão compatível desse projeto com o Node.js, precisei adicionar o Express.

Se você estiver com tempo, recomendo experimentar criar uma API simples e usar algumas bibliotecas diferentes que chamaram a sua atenção. Conseguirá entender o quanto cada uma tem de "boilerplate", se a velocidade delas influencia na quantidade de requisições que você precisa atender, se a "experiência de desenvolvimento" é boa ou não etc.

2

As vezes esqueço que o JavaScript é um ecossistema cheio do mesmo. Agora que você mencionou este fato, nem me surprendeu mais ter 4 frameworks com as mesmas propostas.

Achei muito interessante seu comentário, e fico profundamente agradecido por ele! Talvez, num futuro próximo, nem precise mais de frameworks de gerenciamente de rotas. Seu exemplo com o bun é um exemplo disto.

Mas por agora parece que temos mais projetos legados ou relativamente velhos do que novos, então talvez eu dê uma atenção maior para o express enquanto estudo aos poucos os mais recenetes.

Mais uma vez, muito obrigado!

1

Importante apontar que essas bibliotecas sobre as quais você perguntou não são exatamente frameworks, são apenas bibliotecas. Nesse caso, são bibliotecas que facilitam o gerenciamento de rotas pra servidores HTTP.

Quanto a "não precisar mais dessas bibliotecas": tenta implementar seu próprio Express usando o módulo de http do próprio Node. Não é tão difícil e você vai aprender muito! Mas pra projetos em produção, eu aconselharia usar, sim, Express ou Hono.

1

Citei "framework" pois estava taxado em todos os lugares em que eu vi, apesar de serem pacotes bem simples. Como sou novato no mundo do Backend, nem pensei muito sobre.

Nem passou pela a minha mente criar meu próprio "express", mas já veio uma enxurrada de ideias quando você falou. Acredito que ao ter um certo domínio do HTTP e o Node.js, e claro, ter uma boa estruturação, nem deve ser tão difícil quanto parece ser!

1

Não usei todos estes que mencionou, mas, posso responder que Exrpess é o mais maduro e amplamente utilizado.

Uso com EJS e faço há anos o que o Next veio trazer: gerenciar rotas e ter performance.

É meu canivete suíço!

Faço minhas APIs com Express, alguns SPA ou microsserviço e sempre me atendeu.

Tem outras alternativas?
Claro que tem!

Mas, tratando-se de universo JS, já dizia Vin Diesel em Velozes e Furiosos 5:

"Você está muito longe de casa... Aqui é JavaScript!"

Hahaha

1

Dentre esses 4 eu colocaria o Nest como um framework, enquanto os outros 3 são pacotes para gerenciamento de requisições HTTP. O Nest se aproxima mais de um framework por alguns motivos:

  • Ele é opinado, você precisa seguir o padrão dele para que as coisas funcionem bem (inspirado no Angular);
  • Ele engloba diversos pacotes dentro dele e ja traz várias coisas "prontas", precisando apenas configurar, como gerenciamento de requisições HTTP (ele utiliza Express ou Fastify internamente para o gerenciamento das requisições), filas, conexão com banco de dados, eventos, logging, validação, graphql, microserviços, etc.;
  • Ele gerencia toda a parte de injeção de dependencia da sua aplicação;
  • Ele possui uma cli em que é possivel gerar toda a estrutura de um endpoint com um comando;
  • Já vem com muita coisa configurada por padrão, como lint, testes e typescript(caso utilize);

Então comparado ao restante da lista ele é muito diferente, pois já traz um conjunto de ferramentas desenvolvidas utlizando vários pacotes famosos dentro do ambiente node e testadas, onde basta um import e está disponivel. É uma otima opção no quesito produtividade e em projetos em que voce não vai precisar ter tanto controle sobre os detalhes da sua aplicação.

Mas para quem está iniciando os estudos recomendo começar com o express, porque voce meio que vai ter que aprender a fazer tudo do zero, gerenciar e configurar os detalhes da sua aplicação, como lint, testes, typescript, injeções de dependencia, configurar filas, eventos, banco de dados, etc.

Coisas que o Nest já traz pronto voce vai precisar fazer do zero e isso é ótimo pro aprendizado e até mais para frente entender o que rola por traz do framework e decidir se vale a pena utilizar ele.

1

Comprendo melhor agora a proposta do Nest.js. Isto me lembra o Next.js também. Como eu vim do Front, ainda não conheço bem as tecnologias do backend.

Agradecido pelo o comentário!

1

Insira o ecossitema do Laravel (PHP) no seu estudo também, um dos melhores frameworks fullstack que existem. Mais uma ferramenta para sua caixinha.

1

Eu tenho em vista o PHP no futuro, pois agora estou estudando tanto Node.js (ativamente) e C++ (nos tempos livres).

Mas, infelizmente, perdi duas vaga por aqui na minha cidade que pedia justamente conhecimentos em PHP - Laravel. Com isso, sei que o mercado ainda tá aquecido para PHP, e tenho em mente logo após solidificar O Node.js e o C++