🌐 Detecting your location…

Como corrigir o erro não é possível GET em Express.js: guia completo da solução

⏱️5 min read  ·  964 words

O erroNão é possível OBTER / (ou Cannot GET /some-path) no navegador ao acessar o servidor Express significa que o Express recebeu a solicitação, mas não possui manipulador de rota para esse caminho e método. Veja como corrigir todas as causas.

O que esse erro significa

“Cannot GET /path” é a resposta 404 padrão do Express – ele recebeu uma solicitação GET para /path, mas não encontrou nenhuma rota correspondente. A solicitação chegou ao seu servidor (bom), mas nenhuma rota a trata. A solução é definir a rota correta ou servir os arquivos corretos.

Causa 1: Nenhuma rota definida para o caminho

// 🐛 Server has no route for the root path
const express = require('express');
const app = express();
app.listen(3000);
// Visiting http://localhost:3000/ → "Cannot GET /"

// ✅ Define a route for /
app.get('/', (req, res) => {
  res.send('Hello World');
});
app.listen(3000);

Causa 2: Método HTTP errado

// 🐛 Route is POST but you're making a GET request
app.post('/users', createUser);
// Browsing to /users (a GET) → "Cannot GET /users"
// (the POST route exists, but not a GET route)

// ✅ Add a GET route if you need one
app.get('/users', getUsers);    // for GET requests
app.post('/users', createUser); // for POST requests

Causa 3: Servindo arquivos estáticos incorretamente

// 🐛 Expecting index.html to serve but static middleware isn't set up
// Visiting / → "Cannot GET /" because there's no route or static config

// ✅ Serve static files (HTML, CSS, JS) from a directory
app.use(express.static('public'));
// Now files in ./public are served: /index.html at /, /style.css, etc.

// ✅ Or serve a specific file at the root
app.get('/', (req, res) => {
  res.sendFile(__dirname + '/public/index.html');
});

Causa 4: rota definida após app.listen ou ordem de middleware

// 🐛 Routes defined AFTER listen() never register
app.listen(3000);
app.get('/', handler);   // ❌ too late - server already started

// ✅ Define routes BEFORE listen()
app.get('/', handler);
app.listen(3000);

// 🐛 A catch-all or 404 middleware BEFORE your routes intercepts everything
app.use((req, res) => res.status(404).send('Not found'));
app.get('/users', getUsers);   // ❌ never reached - 404 middleware ran first

// ✅ Put the 404 handler LAST
app.get('/users', getUsers);
app.use((req, res) => res.status(404).send('Not found'));   // last

Causa 5: Barra final ou incompatibilidade de caminho

// 🐛 Route path doesn't exactly match the request
app.get('/users', getUsers);
// Request to /users/ (trailing slash) may not match depending on config

// ✅ Express matches /users and /users/ by default in most versions,
// but be consistent. For explicit control:
app.get('/users', getUsers);
// Or handle both:
app.get(['/users', '/users/'], getUsers);

Causa 6: Roteador não montado corretamente

// 🐛 Router defined but not mounted, or wrong prefix
const router = express.Router();
router.get('/list', getList);
// Forgot to mount it, or mounted at wrong path

// ✅ Mount the router with a base path
const usersRouter = express.Router();
usersRouter.get('/list', getList);
app.use('/users', usersRouter);
// Now the route is at /users/list, not /list

Depuração: Veja suas rotas registradas

// List all registered routes to verify what exists
app._router.stack
  .filter(layer => layer.route)
  .forEach(layer => {
    const methods = Object.keys(layer.route.methods).join(', ').toUpperCase();
    console.log(`${methods} ${layer.route.path}`);
  });
// Prints: GET /, POST /users, etc.
// Confirms whether the route you expect actually exists

Tratamento adequado do 404

// Define all your routes first
app.get('/', homeHandler);
app.get('/users', getUsers);
app.post('/users', createUser);

// Then a catch-all 404 handler LAST (nicer than default "Cannot GET")
app.use((req, res) => {
  res.status(404).json({ error: `Route not found: ${req.method} ${req.path}` });
});

Perguntas Frequentes

P: Por que recebo “Cannot GET /” no caminho raiz?
R: Você não definiu uma rota para/. Adicionarapp.get('/', (req, res) => res.send('Hello')) ou servir arquivos estáticos comapp.use(express.static('public')) então index.html carrega na raiz.

P: Minha rota POST funciona, mas GET dá Cannot GET. Por que?
R: Você definiu a rota comapp.post() mas estão fazendo uma solicitação GET (por exemplo, digitando a URL em um navegador, que envia GET). Adicione umapp.get() rota para esse caminho se você também precisar lidar com solicitações GET.

P: Como faço para veicular uma página HTML na raiz?
R: Useapp.use(express.static('public')) para servir um diretório (index.html carrega em /) ouapp.get('/', (req, res) => res.sendFile(__dirname + '/index.html')) para um arquivo específico.

P: Por que as rotas do meu roteador apresentam Cannot GET?
R: Talvez você não tenha montado o roteador (app.use('/prefix', router)) ou o caminho completo seja diferente do esperado. Um roteador montado em/users com uma rota/list é acessado em/users/list, não/list. Verifique o caminho combinado.

P: A ordem da rota é importante no Express?
R: Sim – o Express corresponde às rotas de cima para baixo. Um middleware pega-tudo ou 404 deve vir por ÚLTIMO, depois de todas as rotas específicas, ou interceptará as solicitações antes que elas cheguem às suas rotas. Ordene suas rotas do específico ao geral.

Conclusão

“Não é possível GET /” significa que o Express recebeu a solicitação, mas não possui rota correspondente para esse caminho e método. As correções:defina uma rota para o caminho (app.get('/', ...)), corresponda ao método HTTP correto, forneça arquivos estáticos comexpress.static(), defina rotas antesapp.listen()e coloque os manipuladores 404 por último. Se for um roteador, certifique-se de que esteja montado com o prefixo correto. Quando travado, registre suas rotas registradas para confirmar o que realmente existe. Depois de verificar se a rota está definida, montada corretamente e corresponde ao método e caminho da solicitação, o erro será resolvido.

MD Rafikul Islam

Written by

MD Rafikul Islam is a software developer and the editor of TechPulse. He writes about developer tooling, hardware, and the practical decisions that come up in day-to-day engineering work — which laptop to buy, which framework to commit to, why a build broke at 2am. He tests the tools he writes about and says plainly when something is not worth the money. Corrections and corrections requests are welcome at rony.yf25@gmail.com.

✍️ Leave a Comment

Your email address will not be published. Required fields are marked *

🌐 Read in:🇬🇧 English🇩🇪 Deutsch🇧🇷 Português🇸🇦 العربية🇮🇳 हिन्दी🇧🇩 বাংলা