
Neste artigo:
Introdução
Node.js revolucionou o desenvolvimento backend ao permitir que JavaScript, originalmente uma linguagem do lado do cliente, fosse executado no servidor. Se você está começando na programação backend, criar um servidor básico é o primeiro passo para entender como aplicações web funcionam.
Por que Node.js?
O Node.js utiliza um modelo de I/O não bloqueante e orientado a eventos, tornando-o leve e eficiente para aplicações em tempo real com muitas conexões simultâneas.
Pré-requisitos
Antes de começar, certifique-se de ter:
Node.js instalado
Baixe a versão LTS no site oficial
Conhecimento básico de JavaScript
Funções, objetos e callbacks
Editor de código
VS Code, Sublime, etc.
Passo 1: Configurando o Projeto
Criar uma Pasta para o Projeto
Abra seu terminal e execute:
mkdir meu-servidor-node
Entrar na Pasta do Projeto
cd meu-servidor-node
Inicializar o Projeto Node.js
npm init -y
O que isso faz?
Cria um arquivo package.json
que armazena informações do projeto (dependências, scripts, versão). A flag -y
aceita todas as configurações padrão automaticamente.
Passo 2: Criando o Servidor
Criar o Arquivo do Servidor
touch server.js
Node.js inclui o módulo nativo http
para criar servidores. No arquivo server.js
adicione:
const http = require('http'); // Importa o módulo HTTP
const server = http.createServer((req, res) => {
// Configura o cabeçalho da resposta (status 200 = sucesso)
res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' });
res.end('Olá, Mundo! Servidor Node.js funcionando!');
});
// Inicia o servidor na porta 3000
server.listen(3000, () => {
console.log('Servidor ativo em http://localhost:3000'); // Mensagem no terminal ao iniciar
});
Executando o servidor:
node server.js
Para testar
Abra o navegador e acesse http://localhost:3000. A mensagem do res.end()
será exibida.
Dica: Se a porta 3000
estiver ocupada, altere o número no server.listen()
.
Passo 3: Adicionando Rotas Básicas
Modifique o server.js
para responder a diferentes URLs:
const server = http.createServer((req, res) => {
// Rota principal
if (req.url === '/') {
res.writeHead(200, { 'Content-Type': 'text/html' });
res.end('Página Inicial
');
}
// Rota "/sobre"
else if (req.url === '/sobre') {
res.writeHead(200, { 'Content-Type': 'text/html' });
res.end('Sobre Nós
');
}
// Rota não encontrada
else {
res.writeHead(404, { 'Content-Type': 'text/html' });
res.end('Erro 404: Página não existe!
');
}
});
Erros Comuns (e Como Evitá-los)
1. Porta já em uso
Cenário de Erro:
Error: listen EADDRINUSE: address already in use :::3000
Solução:
server.listen(3000).on('error', (err) => {
if (err.code === 'EADDRINUSE') {
console.log(`Porta 3000 em uso. Escolha outra porta (ex: 3001)!`);
}
});
2. Bloqueio do Event Loop (Exemplo Crítico)
Código Perigoso:
const fs = require('fs');
// Usando readFileSync (síncrono) - TRAVA O SERVIDOR!
const data = fs.readFileSync('arquivo.txt');
const server = http.createServer((req, res) => {
res.end(data);
});
Solução Correta (Assíncrona):
fs.readFile('arquivo.txt', (err, data) => {
if (err) throw err;
const server = http.createServer((req, res) => {
res.end(data);
});
server.listen(3000);
});
3. Esquecer Headers de CORS
Cenário de Erro:
Frontend recebe Access-Control-Allow-Origin blocked
.
Solução no Servidor:
res.setHeader('Access-Control-Allow-Origin', '*'); // Permite qualquer origem
res.setHeader('Content-Type', 'application/json'); // Para APIs JSON
Comandos Adicionais Úteis
Parar o Servidor
Para interromper a execução do servidor, no terminal pressione: Ctrl + C
.
Dicas Profissionais
1. Use Express.js para Rotas Complexas
const express = require('express');
const app = express();
app.get('/produtos', (req, res) => {
res.json([{ id: 1, nome: 'Teclado' }]);
});
app.listen(3000);
Instale com: npm install express
2. Adicione Logs com morgan
npm install morgan
const morgan = require('morgan');
app.use(morgan('dev')); // Mostra logs no console
3. Variáveis de Ambiente com dotenv
Crie um arquivo .env
:
PORT=3000
require('dotenv').config();
server.listen(process.env.PORT);
Conclusão
Você acabou de criar um servidor Node.js funcional! Para ir além, explore:
Bancos de dados
MySQL, PostgreSQL ou MongoDB com Mongoose
Autenticação
JWT ou OAuth2
Feedback
Gostou? Compartilhe este artigo e comente qual tópico você quer ver aqui!