Skip to content

Este é um projeto educacional focado nos fundamentos do **Node.js** para desenvolvimento backend. Aqui você constrói uma **API RESTful do zero**, usando apenas recursos nativos — **sem frameworks e sem bibliotecas externas**.

Notifications You must be signed in to change notification settings

Cunhaww-dev/fundamentos-nodejs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Fundamentos Node.js puro — Projeto Educacional Node.js Version

📑 Sumário


📋 Visão Geral

Este é um projeto educacional focado nos fundamentos do Node.js para desenvolvimento backend. Aqui você constrói uma API RESTful do zero, usando apenas recursos nativos — sem frameworks e sem bibliotecas externas.

O objetivo é entender como o Node funciona por baixo dos panos, especialmente o módulo HTTP, Streams, roteamento manual e manipulação das requisições/respostas.


🎯 Objetivos de Aprendizado

  • Módulos internos do Node.js (HTTP e Streams)
  • Fundamentos HTTP: Requests, Responses, Headers, Status Codes
  • Tipos de parâmetros: Query, Route e Body
  • Arquitetura de servidor
  • Roteamento manual
  • Persistência simples de dados em memória

📁 Estrutura do Projeto

01-fundamentos-nodejs/
├── src/                               # Código da API
│   ├── server.js                      # Servidor HTTP principal
│   ├── routes.js                      # Definição das rotas
│   ├── database.js                    # Persistência em memória
│   ├── middlewares/
│   │   └── json.js                    # Middleware para parse de JSON
│   └── utils/
│       ├── build-route-path.js        # Construtor de padrões de rota (regex)
│       └── extract-query-params.js    # Extrator de parâmetros da query string
│
├── streams/                           # Exemplos práticos de Streams
└── package.json                       # Configurações do projeto

🚀 Como Executar

npm run dev

Você verá:

Servidor rodando em http://localhost:3333

Com suporte a watch mode para desenvolvimento.

Para testar, use curl ou Insomnia:

# Listar usuários
curl http://localhost:3333/users

# Criar usuário
curl -X POST http://localhost:3333/users \
  -H "Content-Type: application/json" \
  -d '{"name":"Lucas","email":"lucas@email.com"}'

📡 Conceitos HTTP Abordados

🔹 Tipos de Parâmetros

Tipo Exemplo Uso
Query ?userId=1 Filtros, paginação
Route /users/1 Identificar recurso
Body { "name": "Lucas" } Dados sensíveis

💡 Funcionalidades Implementadas

  • ✔️ CRUD completo de usuários
  • ✔️ Roteamento manual com validação
  • ✔️ Parsing de JSON
  • ✔️ Status codes corretos e semânticos
  • ✔️ Extração de parâmetros (query, route, body)
  • ✔️ Exemplos de Streams (conceitos avançados)

📚 Fundamentos Node.js — Guia de Estudos

🎯 O que você vai aprender?

Neste módulo você constrói uma API RESTful usando Node.js puro, entendendo em detalhes:

  • Como funciona o protocolo HTTP
  • Como o Node trata Streams
  • Como processar requisições do zero
  • Como montar rotas manualmente sem Express
  • Como estruturar uma pequena aplicação backend

📁 Estrutura da Pasta do Projeto (explicada)

1️⃣ server.js — O coração da aplicação

  • Cria o servidor HTTP
  • Recebe requisições
  • Envia respostas
  • Integra routes, middlewares e utils

2️⃣ routes.js — Sistema de Roteamento

Define as rotas da API com método + caminho: GET, POST, PUT, PATCH, DELETE.

3️⃣ database.js — Persistência

Armazena usuários em memória usando arrays.

4️⃣ middlewares/json.js

Transforma o corpo da requisição em JSON utilizável.

5️⃣ utils/

  • build-route-path.js: converte /users/:id em regex
  • extract-query-params.js: lê ?page=1&search=lucas

💬 Formas de Enviar Dados para a API

📍 Query Parameters

GET /users?userId=1&page=2

✔ Aparece na URL ✔ Ótimo para filtros ✖ Não seguro para dados sensíveis


🛣️ Route Parameters

GET /users/1

✔ Identifica um recurso ✔ URL limpa e semântica


📦 Request Body

POST /users
{
  "name": "João",
  "email": "joao@email.com"
}

✔ Ideal para dados sensíveis ✔ Não aparece na URL ✔ Usado em criação/edição


🔄 Métodos HTTP

Método Função Exemplo
GET Buscar dados GET /users
POST Criar recurso POST /users
PUT Atualizar tudo PUT /users/1
PATCH Atualizar parte PATCH /users/1
DELETE Remover DELETE /users/1

📊 Status Codes — Interpretação

  • 200–299 → Sucesso
  • 300–399 → Redirecionamento
  • 400–499 → Erro do cliente
  • 500–599 → Erro do servidor

Exemplos:

  • 200 OK — Tudo certo
  • 404 Not Found — Rota não existe
  • 400 Bad Request — Dados inválidos
  • 500 Internal Server Error — Algo falhou no servidor

🔨 Recursos disponíveis nesta API

✔ Criar usuário ✔ Listar todos ✔ Buscar por ID ✔ Atualizar (PUT/PATCH) ✔ Deletar usuário


⚡ Executando o Projeto

npm run dev

Ele irá:

  • Subir na porta 3333
  • Fazer reload automático
  • Aceitar requisições da API

🌊 Streams — Leitura/Escrita Eficiente

Streams são mecanismos para processar dados em partes, sem carregar tudo na memória de uma vez.

Exemplo prático: Upload de arquivo grande (1GB)

  • ❌ Sem Streams: Carrega 1GB inteiro na memória (lento)
  • ✅ Com Streams: Processa aos poucos enquanto grava no BD (eficiente)

Tipos de Streams:

  • Readable - Lê dados aos poucos
  • Writable - Escreve dados aos poucos
  • Transform - Lê e modifica dados no meio do caminho
# Execute o exemplo:
node streams/fundamentals.js

Veja como números são transformados em tempo real!


📖 Conceitos Importantes para Dominar

UUID (Unique Universal ID)

Identificador único para cada usuário. Exemplo: f47ac10b-58cc-4372-a567-0e02b2c3d479

Stateful vs Stateless

  • Stateful: Dados em memória - podem se perder ao reiniciar
  • Stateless: Dados em banco de dados - persistem sempre

Neste projeto usamos Stateful (memória) para aprender os conceitos.

Buffer

Forma temporária de transitar dados entre Streams.


🔄 Anatomia de uma Requisição HTTP

┌─────────────────────────────────────────┐
│ REQUISIÇÃO DO CLIENTE                   │
├─────────────────────────────────────────┤
│ POST /users HTTP/1.1                    │
│ Host: localhost:3333                    │
│ Content-Type: application/json          │
│                                         │
│ {                                       │
│   "name": "João",                       │
│   "email": "joao@email.com"             │
│ }                                       │
└─────────────────────────────────────────┘
           ↓ (passa pelo servidor)
┌─────────────────────────────────────────┐
│ RESPOSTA DO SERVIDOR                    │
├─────────────────────────────────────────┤
│ HTTP/1.1 201 Created                    │
│ Content-Type: application/json          │
│                                         │
│ {                                       │
│   "id": "uuid-123",                     │
│   "name": "João",                       │
│   "email": "joao@email.com"             │
│ }                                       │
└─────────────────────────────────────────┘

📄 Arquivos-Chave Explicados

Arquivo Responsabilidade
server.js Cria servidor, recebe requisições, integra tudo
routes.js Define GET /users, POST /users, etc
database.js Armazena usuários em array
middlewares/json.js Transforma corpo da requisição em JSON
utils/build-route-path.js Converte /users/:id em regex /users/(.+)
utils/extract-query-params.js Extrai ?page=1 do URL

💡 Dicas de Estudo

Conceito Por que importa?
Stateful vs Stateless Entender persistência e comportamento da API
JSON Formato mais usado na web
Headers Metadados essenciais de comunicação
Regex em rotas Criar rotas dinâmicas e robustas
UUID Criar identificadores únicos

🎓 Próximos Passos

Após dominar este módulo, você estará pronto para:

  • Usar frameworks como Express.js
  • Integrar bancos de dados reais
  • Criar APIs mais robustas e seguras
  • Implantar aplicações em servidores e cloud

🤝 Como Contribuir

Se você está estudando este projeto e tem melhorias, abra uma issue ou PR!

📞 Dúvidas?

Revise os arquivos em src/ e streams/ enquanto lê este README.


About

Este é um projeto educacional focado nos fundamentos do **Node.js** para desenvolvimento backend. Aqui você constrói uma **API RESTful do zero**, usando apenas recursos nativos — **sem frameworks e sem bibliotecas externas**.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published