skills/nodejs-best-practices/SKILL.md
Princípios de desenvolvimento em Node.js e tomada de decisão. Seleção de framework, padrões assíncronos, segurança e arquitetura. Ensina a pensar, não a copiar.
npx skillsauth add lucasfdigital/orchard nodejs-best-practicesInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Princípios e tomada de decisão para o desenvolvimento em Node.js em 2025. Aprenda a PENSAR, não a memorizar padrões de código.
Esta skill ensina princípios de tomada de decisão, não código fixo para copiar.
O que você está construindo?
│
├── Edge/Serverless (Cloudflare, Vercel)
│ └── Hono (zero-dependency, cold starts ultra rápidos)
│
├── API de Alta Performance
│ └── Fastify (2-3x mais rápido que o Express)
│
├── Familiaridade Enterprise/Equipe
│ └── NestJS (estruturado, DI, decoradores)
│
├── Legado/Estável/Ecossistema Máximo
│ └── Express (maduro, maior número de middlewares)
│
└── Full-stack com frontend
└── API Routes do Next.js ou tRPC
| Fator | Hono | Fastify | Express | | :--- | :--- | :--- | :--- | | Ideal para | Edge, serverless | Performance | Legado, aprendizado | | Cold start | Mais rápido | Rápido | Moderado | | Ecossistema | Em crescimento | Bom | O maior | | TypeScript | Nativo | Excelente | Bom | | Curva de aprendizado | Baixa | Média | Baixa |
Node.js 22+: --experimental-strip-types
├── Execute arquivos .ts diretamente
├── Sem necessidade de etapa de build para projetos simples
└── Considere para: scripts, APIs simples
ESM (import/export)
├── Padrão moderno
├── Melhor tree-shaking
├── Carregamento de módulos assíncrono
└── Use para: novos projetos
CommonJS (require)
├── Compatibilidade com legado
├── Maior suporte de pacotes npm
└── Use para: bases de código existentes, alguns casos de borda
| Runtime | Ideal Para | | :--- | :--- | | Node.js | Propósito geral, maior ecossistema | | Bun | Performance, bundler integrado | | Deno | Foco em segurança, TypeScript integrado |
Fluxo de Requisição:
│
├── Camada de Controle/Rotas (Controller/Route Layer)
│ ├── Lida com especificidades do HTTP
│ ├── Validação de entrada no limite
│ └── Chama a camada de serviço
│
├── Camada de Serviço (Service Layer)
│ ├── Lógica de negócio
│ ├── Agnóstica a framework
│ └── Chama a camada de repositório
│
└── Camada de Repositório (Repository Layer)
├── Apenas acesso a dados
├── Consultas ao banco de dados
└── Interações com ORM
Padrão:
├── Crie classes de erro customizadas
├── Lance (throw) de qualquer camada
├── Capture no nível superior (middleware)
└── Formate uma resposta consistente
O Cliente recebe:
├── Status HTTP apropriado
├── Código de erro para tratamento programático
├── Mensagem amigável para o usuário
└── NENHUM detalhe interno (segurança!)
Os Logs recebem:
├── Stack trace completo
├── Contexto da requisição
├── ID do usuário (se aplicável)
└── Carimbo de data/hora (timestamp)
| Situação | Status | Quando | | :--- | :--- | :--- | | Entrada ruim | 400 | Cliente enviou dados inválidos | | Sem autenticação | 401 | Credenciais ausentes ou inválidas | | Sem permissão | 403 | Autenticação válida, mas não permitida | | Não encontrado | 404 | O recurso não existe | | Conflito | 409 | Conflito de estado ou duplicidade | | Validação | 422 | Schema válido, mas regras de negócio falharam | | Erro do servidor | 500 | Erro nosso, logue tudo |
| Padrão | Use Quando |
| :--- | :--- |
| async/await | Operações assíncronas sequenciais |
| Promise.all | Operações independentes paralelas |
| Promise.allSettled| Paralelo onde algumas podem falhar |
| Promise.race | Timeout ou a primeira resposta vence |
I/O-bound (async ajuda):
├── Consultas ao banco de dados
├── Requisições HTTP
├── Sistema de arquivos
└── Operações de rede
CPU-bound (async não ajuda):
├── Operações de criptografia
├── Processamento de imagem
├── Cálculos complexos
└── → Use worker threads ou delegue o processamento
Onde validar:
├── Ponto de entrada da API (body/params da requisição)
├── Antes de operações no banco de dados
├── Dados externos (respostas de API, uploads de arquivos)
└── Variáveis de ambiente (na inicialização)
| Biblioteca | Ideal Para | | :--- | :--- | | Zod | Focada em TypeScript, inferência | | Valibot | Bundle menor (tree-shakeable) | | ArkType | Crítico em performance | | Yup | Uso existente com formulários em React |
| Tipo | Propósito | Ferramentas | | :--- | :--- | :--- | | Unitário | Lógica de negócio | node:test, Vitest | | Integração | Endpoints de API | Supertest | | E2E | Fluxos completos | Playwright |
Antes de implementar:
Lembre-se: Melhores práticas em Node.js são sobre a tomada de decisão, não sobre memorizar padrões. Cada projeto merece uma consideração nova baseada em seus requisitos.
development
Princípios de teste de aplicações web. E2E, Playwright, estratégias de auditoria profunda.
development
Revisar o código da UI para conformidade com as Web Interface Guidelines. Use quando solicitado para "revisar minha UI", "checar acessibilidade", "auditar design", "revisar UX" ou "verificar meu site em relação às melhores práticas".
testing
Princípios avançados de análise de vulnerabilidade. OWASP 2025, Segurança da Cadeia de Suprimentos (Supply Chain), mapeamento de superfície de ataque e priorização de riscos.
testing
Padrões e princípios de teste. Estratégias de testes unitários, de integração e mocking.