- Visão Geral
- Objetivos de Aprendizado
- Estrutura do Projeto
- Como Executar
- Conceitos HTTP
- Funcionalidades
- Guia de Estudos
- Streams
- Arquivos-Chave
- Dicas de Estudo
- Próximos Passos
- Como Contribuir
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.
- 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
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
npm run devVocê 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"}'| Tipo | Exemplo | Uso |
|---|---|---|
| Query | ?userId=1 |
Filtros, paginação |
| Route | /users/1 |
Identificar recurso |
| Body | { "name": "Lucas" } |
Dados sensíveis |
- ✔️ 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)
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
- Cria o servidor HTTP
- Recebe requisições
- Envia respostas
- Integra routes, middlewares e utils
Define as rotas da API com método + caminho: GET, POST, PUT, PATCH, DELETE.
Armazena usuários em memória usando arrays.
Transforma o corpo da requisição em JSON utilizável.
- build-route-path.js: converte
/users/:idem regex - extract-query-params.js: lê
?page=1&search=lucas
GET /users?userId=1&page=2
✔ Aparece na URL ✔ Ótimo para filtros ✖ Não seguro para dados sensíveis
GET /users/1
✔ Identifica um recurso ✔ URL limpa e semântica
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é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 |
- 200–299 → Sucesso
- 300–399 → Redirecionamento
- 400–499 → Erro do cliente
- 500–599 → Erro do servidor
200 OK— Tudo certo404 Not Found— Rota não existe400 Bad Request— Dados inválidos500 Internal Server Error— Algo falhou no servidor
✔ Criar usuário ✔ Listar todos ✔ Buscar por ID ✔ Atualizar (PUT/PATCH) ✔ Deletar usuário
npm run devEle irá:
- Subir na porta 3333
- Fazer reload automático
- Aceitar requisições da API
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)
- 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.jsVeja como números são transformados em tempo real!
Identificador único para cada usuário. Exemplo: f47ac10b-58cc-4372-a567-0e02b2c3d479
- 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.
Forma temporária de transitar dados entre Streams.
┌─────────────────────────────────────────┐
│ 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" │
│ } │
└─────────────────────────────────────────┘
| 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 |
| 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 |
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
Se você está estudando este projeto e tem melhorias, abra uma issue ou PR!
Revise os arquivos em src/ e streams/ enquanto lê este README.