Criando um Servidor Web Mínimo sem Dependências no Node.js

Criando um Servidor Web Mínimo sem Dependências no Node.js

Subir uma aplicação web simples sem recorrer a frameworks pesados reduz drasticamente o consumo de memória. Isso contribui para menor pegada, menos dependências e maior previsibilidade de desempenho em ambientes de produção. Além disso, reduz tempos de compilação durante o deploy e facilita manutenção futura.

Utilizar o módulo nativo node:http permite criar rotas básicas e responder a requisições HTTP utilizando exclusivamente os recursos padrão do Node.js. Isso evita dependências externas e aproveita a estabilidade das APIs nativas, simplificando a versão de runtime necessária.

JavaScript

import http from 'node:http';

// Define a porta e o host de execução
const PORT = 3000;
const HOST = 'localhost';

// Cria a instância do servidor HTTP
const server = http.createServer((req, res) => {
  const { method, url } = req;

  // Roteamento simples baseado no método e na URL
  if (method === 'GET' && url === '/') {
    res.writeHead(200, { 'Content-Type': 'application/json' });
    res.end(JSON.stringify({ mensagem: 'API nativa funcionando com sucesso!' }));
  } else if (method === 'GET' && url === '/status') {
    res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' });
    res.end('Servidor ativo e operacional.');
  } else {
    // Trata rotas não encontradas (404)
    res.writeHead(404, { 'Content-Type': 'application/json' });
    res.end(JSON.stringify({ erro: 'Rota não encontrada' }));
  }
});

// Inicializa o servidor na porta especificada
server.listen(PORT, HOST, () => {
  console.log(`🚀 Servidor rodando em http://${HOST}:${PORT}`);
});

Pontos-chave

  • Zero Dependências: O módulo node:http vem integrado ao ecossistema do Node.js, dispensando o gerenciador de pacotes (npm install) e o diretório node_modules.
  • Manipulação de req e res: O parâmetro req (ReadableStream) traz metadados da requisição como método e caminho, enquanto res (WritableStream) é utilizado para escrever os cabeçalhos (writeHead) e o corpo da resposta (end).
  • Codificação do Cabeçalho: É indispensável definir o parâmetro 'Content-Type' adequado (como application/json ou text/plain; charset=utf-8) para que o cliente interprete corretamente a resposta.
  • Tratamento Manual de Rotas: Diferente do Express, o módulo nativo não faz parsing automático de parâmetros de busca ou do corpo de requisições POST (payloads), exigindo o consumo manual dos buffers de dados (req.on('data')).

Thales de Oliveira Gomes

Thales de Oliveira Gomes é gestor de Tecnologia da Informação, especialista em infraestrutura de redes, computação em nuvem e operações de TI hospitalar, com mais de 18 anos de experiência na área. Graduado em Gestão de TI e pós-graduado em Engenharia de Redes e Telecomunicações, Cloud Computing, Redes de Computadores e Gestão Hospitalar, construiu uma trajetória sólida liderando projetos de alta complexidade, como a implementação e migração para nuvem de sistemas ERP de grande porte. Sua atuação no setor o levou a ser indicado ao prêmio IT Leaders Brasil na categoria Rising Leaders. Além da carreira corporativa e da paixão por tecnologia, Thales é autor independente com mais de 70 obras publicadas sobre redes, segurança da informação, Linux e física, além de criador de conteúdo no blog Vetor Tech e na plataforma CiberDicas. No universo das artes e do entretenimento, atua como produtor de música eletrônica sob o projeto Yknex, cria ilustrações digitais e compartilha walkthroughs de games no YouTube.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *