Lançamento do Express v5 - Uma nova era para o framework Node.js
(expressjs.com)- O primeiro PR da v5 foi aberto há 10 anos, e finalmente foi feito o merge e publicado
- Um release intencionalmente simplificado para viabilizar mudanças mais impactantes nas próximas versões
- Também serve para sinalizar ao ecossistema Node.js que o Express voltou a se movimentar
Principais mudanças
-
Mudanças no suporte a versões do Node.js
- Suporte ao Node.js 0.10 descontinuado; agora passa a suportar Node 18 ou superior
- Resolve o problema de mudanças importantes para desempenho e manutenção terem sido adiadas por causa do suporte a versões antigas do Node.js
- Agora é possível adotar novos recursos da linguagem e do runtime, além de remover dependências que já não são mais necessárias
- Reconhecendo as dificuldades de empresas que usam versões antigas do Node.js, há uma parceria com a HeroDevs para oferecer “suporte indefinido”, com patches críticos de segurança mesmo após o fim do suporte da v4
-
Mudanças em correspondência de rotas e regex
- A biblioteca
path-to-regexpfoi atualizada da versão 0.x para a 8.x, incorporando mudanças acumuladas ao longo de vários anos - Suporte a subexpressões regex (ex.:
/:foo(\\d+)) foi descontinuado- Removido para evitar ataques de ReDoS
- Como migrar: recomenda-se usar uma biblioteca robusta de validação de entrada
- Inclusão de padrões simplificados para padrões de rota comuns
:name?mudou para{:name}*mudou para*name(,),[,],?,+,!foram adicionados como caracteres reservados
- Suporte a parâmetros numéricos posicionais foi descontinuado. Agora todos os parâmetros precisam ter nome
- A biblioteca
-
Suporte a Promise
- Adicionado suporte a Promises rejeitadas por erros ocorridos no middleware
- Isso não inclui chamar
nextem Promises resolvidas - Na maioria dos casos, agora é possível escrever middleware assim:
app.use(async (req, res, next) => { req.locals.user = await getUser(req); next(); });
-
Mudanças no body parser
- Adicionada opção para personalizar a profundidade do body urlencoded para mitigar o CVE-2024-45590 (padrão: 32)
- O middleware combinado
bodyParser()obsoleto foi removido req.bodynão é mais inicializado sempre como{}- O valor padrão de
extendedno parserurlencodedpassou a ser false - Adicionado suporte à compressão de dados sem perdas Brotli
-
Remoção de assinaturas de método obsoletas
res.redirect('back')eres.location('back'): não oferecem mais suporte à string mágica'back'. Em vez disso, use explicitamentereq.get('Referrer') || '/'- Assinaturas
res.send(status, body)eres.send(body, status): useres.status(status).send(body) - Assinatura
res.send(status): para respostas simples de status, useres.sendStatus(status); para enviar um código de status com body opcional, useres.status(status).send() - Outras assinaturas de método obsoletas também foram removidas (veja o guia de migração para mais detalhes)
-
Diretrizes de migração e segurança
- Foi disponibilizado um guia detalhado de migração para desenvolvedores que estão migrando da v4 para a v5
- Também foi disponibilizado um modelo abrangente de ameaças, oferecendo insights importantes sobre áreas como validação de entrada do usuário e práticas de segurança para um uso seguro e protegido do Express
Opinião do GN⁺
- O Express v5 é um release focado em mostrar ao ecossistema Node.js que o Express voltou a se movimentar. O foco está no fim do suporte a versões antigas do Node.js, na resolução de questões de segurança e na simplificação da manutenção
- Este release foi mantido intencionalmente simples para remover obstáculos no ecossistema e permitir mudanças de maior impacto em versões futuras
- O Express segue a filosofia de ser um framework web rápido, minimalista e sem imposições para Node.js. Isso oferece insights importantes em áreas como validação de entrada do usuário e práticas de segurança
- Um guia detalhado para migração para o Express v5 e um modelo abrangente de ameaças foram disponibilizados para ajudar desenvolvedores a usar o Express com segurança e estabilidade
- Os novos mantenedores do projeto Express têm como objetivo desenvolver o ecossistema do Express como uma ferramenta estável e confiável. Para isso, pretendem colaborar com a comunidade para resolver problemas e promover melhorias
4 comentários
Ah, então finalmente suporta
promise. Nós ainda usamos bastante o Express haha; é uma boa notícia.A maioria já migrou para o nestjs, então quase não há mais ocasião para usar diretamente. É praticamente a mesma coisa que usar servlets diretamente
Finalmente passou a ser possível lidar com erros de
promise, mas a esta altura nem sei se ainda existe um motivo real para usar isso.Comentários do Hacker News
Gostaria de expressar minha gratidão ao Wes e à equipe. Precisei ler duas vezes que já se passaram 10 anos desde que o PR da v5 foi aberto. Deve ter sido necessário um esforço enorme para mudar a inércia deste projeto. Parabéns por este novo capítulo
Parabéns à equipe do Express. Existem muitos outros frameworks de servidor web para Node JS, mas não mudei para outro porque o Express oferece tudo de que preciso. Espero que isso continue assim
Menciona que o Express ainda não é
latestAgradece ao Wes e à equipe pelo trabalho. O Express continua sendo a escolha preferida no nodejs, e é bom ver que ele está sendo mantido ativamente
Pergunta-se por que o lançamento da v5 levou 10 anos
Menção ao perl 6
A ideia de incluir a resposta como parte da entrada da rota parece algo dos anos 2010. Hoje em dia, a maioria das coisas tem rotas que recebem uma requisição e retornam uma resposta. Isso combina melhor com HTTP
Nunca tinha visto o modelo de "transferir a versão anterior para uma empresa privada para fornecer suporte"
Pergunta-se como o Express se compara com koa, fastify etc.