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 if
s 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.
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!