Servidor Web Simples com Node.js + Express (com tutorial completo e API em JSON)

Criando um servidor web simples com Node.js e Express

Neste tutorial você vai criar e executar um servidor web funcional usando Node.js e Express, entendendo na prática a diferença entre rotas para pessoas (HTML) e rotas para sistemas (API em JSON).

Ao final, você terá:

  • Uma página web acessível em / (HTML)
  • Uma mini API acessível em /api/hello (JSON)
  • Checklist de instalação no Windows
  • Soluções para erros comuns de iniciantes

1) O que vamos construir

Vamos criar um servidor HTTP usando Express, escutando na porta 3000, com duas rotas principais:

Rota 1 — GET /

  • Retorna HTML
  • Pensada para abrir no navegador
  • Contém um link para a rota da API

Rota 2 — GET /api/hello

  • Retorna JSON
  • Pensada para ser consumida por aplicações, front-ends e integrações

Essa separação é fundamental em aplicações modernas: HTML para humanos, JSON para sistemas.


2) Pré-requisitos

  • Node.js (versão LTS) instalado
  • Um terminal (PowerShell, CMD ou terminal do IDE)

Para verificar se está tudo certo, execute:

node --version
npm --version

Se aparecer que o comando não é reconhecido, pule para a seção de troubleshooting.


3) Estrutura do projeto

01-TesteWindsurf/
  package.json
  server.js
  README.md

(Opcional) Para servir arquivos estáticos:

01-TesteWindsurf/
  public/
    index.html
    style.css

4) Conteúdo do package.json

{
  "name": "servidor-web-simples",
  "version": "1.0.0",
  "description": "Exemplo simples de servidor web",
  "main": "server.js",
  "scripts": {
    "start": "node server.js",
    "dev": "nodemon server.js"
  },
  "dependencies": {
    "express": "^4.18.2"
  },
  "devDependencies": {
    "nodemon": "^3.0.1"
  }
}

Explicação rápida:

  • dependencies: o que o servidor precisa para rodar
  • devDependencies: ferramentas de apoio ao desenvolvimento
  • npm start: roda o servidor
  • npm run dev: reinicia automaticamente ao salvar

5) Conteúdo do server.js

const express = require('express');
const app = express();
const port = 3000;

// Middleware para servir arquivos estáticos
app.use(express.static('public'));

// Rota principal
app.get('/', (req, res) => {
  res.send(
    '<h1>Olá! Servidor web funcionando!</h1>' +
    '<p>Visite <a href="/api/hello">/api/hello</a> para ver a API.</p>'
  );
});

// API endpoint
app.get('/api/hello', (req, res) => {
  res.json({
    message: 'Olá do servidor!',
    timestamp: new Date()
  });
});

// Iniciar servidor
app.listen(port, () => {
  console.log(`Servidor rodando em http://localhost:${port}`);
});

O link para /api/hello serve apenas para visualizar o JSON no navegador. Em aplicações reais, essa rota é consumida por código.


6) Instalação e execução

Instalar dependências

npm install

Rodar o servidor

npm start

Ou em modo desenvolvimento:

npm run dev

Acessar no navegador

  • HTML: http://localhost:3000
  • API: http://localhost:3000/api/hello

Teste via terminal (opcional)

curl http://localhost:3000/api/hello

7) Troubleshooting (Windows)

Node ou npm não reconhecidos

  • Instale o Node.js LTS em https://nodejs.org
  • Feche e reabra o terminal
  • Teste novamente os comandos

PowerShell bloqueando npm.ps1

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

Alternativa simples: use o CMD.

Cannot find module ‘express’

npm install

8) Onde entra o Windsurf?

O Windsurf, como IDE com assistência de IA, acelera:

  • Criação do esqueleto do projeto
  • Compreensão do código
  • Correção de erros de ambiente
  • Evolução incremental do servidor

Código-fonte do exemplo no GitHub:
https://github.com/fgbettio/01-TesteWindsurf


9) Próximos passos

  • Criar uma rota /status
  • Ler query params (/api/hello?name=Ana)
  • Adicionar logs e tratamento de erros
  • Separar rotas em arquivos
  • Criar um front-end consumindo a API

CMaker — laboratório de aprendizado e criação.
Do protótipo ao sistema rodando.

Dúvidas? Pergunte AQUI

Gostou? Compartilhe em sua rede

Mestre em Educação e Novas Tecnologias pela Uninter, pós-graduado em Engenharia de Software pela Pontifícia Universidade Católica do Paraná, graduado em Engenharia de Computação pela Pontifícia Universidade Católica do Paraná e técnico em eletrônica pelo CEFET-PR. Atualmente é professor de ensino superior na Pontifícia Universidade Católica do Paraná, Unibrasil e Gran Faculdade lecionando as disciplinas de Sistemas Cyber físicos, Programação Avançada, Estrutura de Dados e Arquitetura de Computadores. Tem experiência na área de Engenharia Elétrica, com ênfase em computação, atuando principalmente no desenvolvimento de sistemas embarcados e projetos eletrônicos. mentor, professor, engenheiro, palestrante, incentivador da cultura maker além de Fundador do Espaço CMaker um espaço para aprendizado colaborativo e metodologia STEAM.