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:httpvem integrado ao ecossistema do Node.js, dispensando o gerenciador de pacotes (npm install) e o diretórionode_modules. - Manipulação de
reqeres: O parâmetroreq(ReadableStream) traz metadados da requisição como método e caminho, enquantores(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 (comoapplication/jsonoutext/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')).
