Principais erros de desenvolvedores JavaScript iniciantes (Node.js)
JavaScript é uma das linguagens de programação mais populares, especialmente no ambiente Node.js. No entanto, sua flexibilidade e natureza assíncrona frequentemente se tornam uma pedra no sapato para iniciantes. Neste artigo, vamos analisar os 4 erros mais comuns que desenvolvedores iniciantes em JavaScript cometem e mostrar como corrigi-los com exemplos práticos.
1. Falta de compreensão da assincronicidade e ordem de execução do código
O erro mais comum é esperar que o código execute linha por linha, como em linguagens síncronas. No Node.js, muitas operações (leitura de arquivos, consultas ao banco de dados, timers) são assíncronas.
Exemplo incorreto:
const fs = require('fs');let data = '';
fs.readFile('file.txt', 'utf8', (err, content) => { if (err) throw err; data = content;});
console.log(data); // Exibirá: '' (string vazia), e não o conteúdo do arquivoAbordagem correta:
const fs = require('fs').promises;
async function readFile() { try { const data = await fs.readFile('file.txt', 'utf8'); console.log(data); // Agora obteremos o conteúdo do arquivo } catch (err) { console.error(err); }}
readFile();Dica: Sempre use async/await ou promises (.then()) para trabalhar com código assíncrono. Nunca confie que o callback será executado antes da próxima linha.
2. Confusão com escopo e as palavras-chave var, let, const
Muitos iniciantes usam var por hábito, sem entender que ele não tem escopo de bloco. Isso leva a bugs difíceis de encontrar em loops e estruturas condicionais.
Exemplo incorreto com var:
for (var i = 0; i < 5; i++) { setTimeout(() => console.log(i), 100);}// Exibirá: 5, 5, 5, 5, 5 (e não 0,1,2,3,4)Correção com let:
for (let i = 0; i < 5; i++) { setTimeout(() => console.log(i), 100);}// Exibirá: 0, 1, 2, 3, 4Recomendações:
const— use por padrão para variáveis que não são reatribuídas.let— para variáveis cujo valor muda.var— evite em código moderno (no Node.js quase não é necessário).
3. Mutação de objetos e arrays (imutabilidade)
Desenvolvedores iniciantes frequentemente alteram os dados originais diretamente, o que causa efeitos colaterais, especialmente ao trabalhar com React, Redux ou lógica complexa.
Exemplo incorreto:
const user = { name: 'Иван', age: 30 };
function updateAge(person, newAge) { person.age = newAge; // Mutação do objeto original! return person;}
const updatedUser = updateAge(user, 31);console.log(user.name); // 'Иван' — tudo okconsole.log(user === updatedUser); // true — é o mesmo objeto, bug!Abordagem correta (criação de novo objeto):
const user = { name: 'Иван', age: 30 };
function updateAge(person, newAge) { return { ...person, age: newAge }; // Criamos uma cópia}
const updatedUser = updateAge(user, 31);console.log(user.age); // 30 — objeto original não foi alteradoconsole.log(updatedUser.age); // 31Dica: Para arrays, use map(), filter(), reduce() em vez de push() ou splice(), se quiser manter a imutabilidade.
4. Ignorar o tratamento de erros em Promise e async/await
Muitos iniciantes esquecem de tratar erros em código assíncrono, o que leva à queda de toda a aplicação Node.js.
Exemplo incorreto:
async function fetchData() { const response = await fetch('https://api.example.com/data'); const data = await response.json(); console.log(data);}
fe