7 pontos por GN⁺ 2024-10-20 | 4 comentários | Compartilhar no WhatsApp
  • 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-regexp foi 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
  • Suporte a Promise

    • Adicionado suporte a Promises rejeitadas por erros ocorridos no middleware
    • Isso não inclui chamar next em 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.body não é mais inicializado sempre como {}
    • O valor padrão de extended no parser urlencoded passou a ser false
    • Adicionado suporte à compressão de dados sem perdas Brotli
  • Remoção de assinaturas de método obsoletas

    • res.redirect('back') e res.location('back'): não oferecem mais suporte à string mágica 'back'. Em vez disso, use explicitamente req.get('Referrer') || '/'
    • Assinaturas res.send(status, body) e res.send(body, status): use res.status(status).send(body)
    • Assinatura res.send(status): para respostas simples de status, use res.sendStatus(status); para enviar um código de status com body opcional, use res.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

 
aer0700 2024-10-22

Ah, então finalmente suporta promise. Nós ainda usamos bastante o Express haha; é uma boa notícia.

 
vipeen 2024-10-21

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

 
chotnt741 2024-10-20

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.

 
GN⁺ 2024-10-20
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

    • Ao usar expressões regulares, há casos em que o parsing da entrada apresenta comportamento de tempo exponencial. Isso pode ser evitado facilmente ao migrar para um mecanismo de expressões regulares de verdade, como o re2
    • É possível consultar o texto do rsc, "Regular Expression Matching Can Be Simple And Fast"
  • 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 é latest

  • Agradece 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.