1
resposta

[Sugestão] Não é necessario converter os Ids de req.params de String para Number

Acredito que foi só uma ferramenta (justificativa) usada para ensinar o uso das "help functions"/ utils na aula 3.7, 3.8 e 3.9.

module.exports = (objetoParams) => {
 for (let propriedade in objetoParams) {
   if (/Id|id/.test(propriedade)) {
     objetoParams[propriedade] = Number(objetoParams[propriedade]);
   }
 }
 return objetoParams;
};

Mas é valido trazer esse aviso, que não precisa realizar esse processo de conversão.

O motivo de não ser necessário converter de String para Number é que não será realizado nenhum cálculo com o Id, e o JavaScript entende uma variável String contendo apenas um número como semântica de Number, passando o valor adiante, e o Sequelize constrói o SQL corretamente.

Aproveito e já relato tambem um bug que nesse regex, ele tá buscando em toda a string, e não apenas no final (onde tem a flag _id ou Id) sendo assim, se tivesse um atributo/linha "ideia" do tipo texto, iria cair no if e tentar converter texto não enumerável em número, quebrando a aplicação com um erro silencioso

a solução deixei nesse outro post https://cursos.alura.com.br/forum/topico-bug-bug-no-regex-que-idenrifica-se-a-propriedade-possui-id-ou-id-452025

1 resposta

Oi, Luis! Tudo bem?

Você levantou um ponto interessante sobre a conversão de IDs de string para número e a regex utilizada. Realmente, em muitos casos, o JavaScript consegue lidar bem com strings que contêm apenas números, especialmente quando estamos apenas passando esses valores para o Sequelize, que faz a conversão internamente.

Sobre o regex, você está certo ao apontar que ele pode causar problemas se houver propriedades como "ideia". Uma maneira de melhorar a regex para garantir que ela só converta propriedades que terminam com "Id" ou "id" seria usar o símbolo $, que indica o final da string, a regex ficaria assim:

module.exports = (objetoParams) => {
  for (let propriedade in objetoParams) {
    if (/Id$|id$/.test(propriedade)) {
      objetoParams[propriedade] = Number(objetoParams[propriedade]);
    }
  }
  return objetoParams;
};

Com essa alteração, apenas propriedades que terminam com "Id" ou "id" serão convertidas, evitando problemas com propriedades como "ideia".

Obrigada por ter compartilhado esse ponto com a nossa comunidade! Espero ter contribuído!

Um forte abraço e bons estudos!