“`html
Erros comuns em Node.js que você deve evitar
Node é rápido, mas também é fácil de errar. Aqui vão os problemas mais frequentes (e como corrigir com segurança),
para você construir APIs e serviços que se mantêm estáveis em produção.
1) Tratar “assíncrono” como se fosse “sincrono”
- Não retornar/await em Promises dentro de rotas (ex.: você chama uma função async, mas não espera o resultado).
- Callback + Promise misturados sem um fluxo claro: você acaba resolvendo/rejeitando duas vezes ou nunca resolve.
- Usar async sem tratar erros: exceptions dentro de async functions precisam ser capturadas e repassadas.
Regra prática: se sua função é async, mantenha um fluxo consistente e garanta que erros sejam encaminhados de forma previsível.
2) Engolir erros e perder rastreabilidade
- catch vazio ou console.log sem estrutura: você perde contexto.
- Retornar status 200 mesmo quando falhou (por falta de tratamento do erro real).
- Falta de correlação: sem um request id/trace, debugging vira caça ao tesouro.
O ideal é padronizar respostas de erro (mensagem pública + detalhes internos), e manter logs com o mesmo formato em toda a aplicação.
3) Quebrar o event loop com operações pesadas
- CPU-bound no mesmo processo (criptografia pesada, parsing gigantesco, loops extensos).
-
Operações síncronas como
fs.readFileSync,JSON.parseem strings enormes ou processamento em massa sem planejamento. - Concorrência descontrolada: disparar milhares de Promises simultâneas para banco/HTTP e derrubar tudo.
Quando a operação for pesada, considere estratégia: filas, limites de concorrência, streaming, cache e (quando necessário) worker threads/processos isolados.
4) Falhas de segurança e validação (por padrão otimista)
- Aceitar payloads sem validação (tipos errados viram bug; campos ausentes viram comportamento inesperado).
- Montar queries/lógicas com dados do usuário sem sanitização (risco de injeção e manipulação).
- Expor detalhes internos em respostas de erro (stack trace, mensagens do banco, paths do servidor).
- Falta de limites: tamanho de payload, tempo de request, rate limit e controle de uploads.
Valide entrada, normalize dados e trate erros com mensagens seguras. Isso reduz bugs e também reduz superfície de ataque.
Exemplo prático Fluxo correto de rota com validação e tratamento de erro
import express from "express";
const app = express();
app.use(express.json());
// Middleware de validação básica (substitua por um schema robusto se necessário)
function requireFields(fields) {
return (req, res, next) => {
for (const f of fields) {
if (req.body?.[f] === undefined) {
return res.status(400).json({ message: `Campo obrigatório: ${f}` });
}
}
next();
};
}
// Exemplo de rota: fluxo consistente com async/await + tratamento
app.post("/users", requireFields(["email", "name"]), async (req, res, next) => {
try {
const { email, name } = req.body;
// Evite lógica pesada aqui; mantenha a rota previsível
// Ex.: checar unicidade e gravar no banco (com queries parametrizadas)
const created = await createUser({ email, name });
return res.status(201).json(created);
} catch (err) {
// Não responda com dados sensíveis
// Faça log com contexto (ex.: requestId) no seu logger real
next(err);
}
});
// Handler de erro centralizado
app.use((err, req, res, next) => {
const status = err?.statusCode || 500;
// Em produção, registre o erro com contexto e trace
// console.error(err);
return res.status(status).json({
message: status === 500 ? "Erro interno" : (err?.message || "Erro"),
});
});
function createUser({ email, name }) {
// Placeholder: use seu repositório/banco real aqui
return Promise.resolve({ id: "u_1", email, name });
}
app.listen(3000, () => console.log("API rodando na porta 3000"));
Quer evoluir de verdade no Node.js?
Se você gostou desse conteúdo, recomendo continuar por aqui: leia outros posts técnicos e aprofunde os padrões que deixam suas
APIs mais estáveis, rápidas e seguras.
“`
Sou Apaixonado pela programação e estou trilhando o caminho de ter cada diz mais conhecimento e trazer toda minha experiência vinda do Design para a programação resultando em layouts incríveis e idéias inovadoras! Conecte-se Comigo!