Cannot GET / Route Express Fix – Complete Beginner Guide for Node.js Developers

Cannot GET / Route Express Fix

If you are learning Node.js and Express.js, one of the most common errors you will see is:

Cannot GET /

This error confuses many beginners because the server is running correctly, but the browser still shows an error page.

In this complete guide, you will learn:

  • What “Cannot GET /” means
  • Why the error happens
  • How to fix it step-by-step
  • Express routing basics
  • Static file serving
  • API route handling
  • Apollo Server integration
  • Common mistakes developers make
  • Best practices for Express applications

This guide is beginner friendly and uses simple English with practical examples.

Cannot GET / route Express fix

What Does “Cannot GET /” Mean in Express?

The error:

Cannot GET /

means:

Your Express server is running, but Express cannot find a route handler for the URL you are requesting.

Usually, this happens when you open:

http://localhost:3000/Code language: JavaScript (javascript)

but your Express application does not contain:

app.get("/")Code language: JavaScript (javascript)

Why Does This Error Happen?

The “Cannot GET / route Express fix” issue usually happens because of one of these reasons:

  1. No root route defined
  2. Wrong route path
  3. Static files not configured
  4. Using APIs only
  5. Frontend and backend mismatch
  6. Router not connected properly
  7. Apollo Server configured without homepage route

Basic Express Server Example

Here is a simple Express server:

import express from "express";

const app = express();

app.listen(3000, () => {
  console.log("Server running on port 3000");
});Code language: JavaScript (javascript)

If you run this code and open:

http://localhost:3000Code language: JavaScript (javascript)

you will see:

Cannot GET /

Why?

Because there is no route defined.


Fix 1: Add Root Route

The simplest Cannot GET / route Express fix is adding a root route.

Correct Solution

import express from "express";

const app = express();

app.get("/", (req, res) => {
  res.send("Welcome to Express App");
});

app.listen(3000, () => {
  console.log("Server running on port 3000");
});Code language: JavaScript (javascript)

Now when you open:

http://localhost:3000Code language: JavaScript (javascript)

you will see:

Welcome to Express App

Understanding Express Routes

Express routes tell the server how to respond to requests.

GET Route

app.get("/", (req, res) => {
  res.send("Home Page");
});Code language: PHP (php)

API Route

app.get("/users", (req, res) => {
  res.json([
    { name: "John" },
    { name: "David" }
  ]);
});Code language: PHP (php)

Route Parameters

app.get("/users/:id", (req, res) => {
  res.send(req.params.id);
});Code language: PHP (php)

Fix 2: Check Route Path Carefully

Sometimes developers define:

app.get("/home")Code language: JavaScript (javascript)

but open:

http://localhost:3000/Code language: JavaScript (javascript)

This causes the Cannot GET / error because / and /home are different routes.

Correct URL

http://localhost:3000/homeCode language: JavaScript (javascript)

Fix 3: Serve Static Files Properly

Many beginners use HTML files but forget to configure static middleware.

Wrong Setup

import express from "express";

const app = express();

app.listen(3000);Code language: JavaScript (javascript)

Opening / gives:

Cannot GET /

Correct Static File Setup

Folder Structure

project/
│
├── public/
│   └── index.html
│
└── server.jsCode language: PHP (php)

Express Code

import express from "express";
import path from "path";

const app = express();

app.use(express.static("public"));

app.listen(3000, () => {
  console.log("Server running");
});Code language: JavaScript (javascript)

Now Express automatically serves:

public/index.htmlCode language: PHP (php)

when users open:

http://localhost:3000Code language: JavaScript (javascript)

Example index.html

<!DOCTYPE html>
<html>
<head>
  <title>Express App</title>
</head>
<body>
  <h1>Hello Express</h1>
</body>
</html>Code language: HTML, XML (xml)

Fix 4: Using Express Router Correctly

Many Node.js developers use Express Router incorrectly.

Common Mistake

routes/user.js

import express from "express";

const router = express.Router();

router.get("/", (req, res) => {
  res.send("Users Route");
});

export default router;Code language: JavaScript (javascript)

But forget to connect router in main app.


Correct Setup

server.js

import express from "express";
import userRoutes from "./routes/user.js";

const app = express();

app.use("/users", userRoutes);

app.listen(3000);Code language: JavaScript (javascript)

Now:

http://localhost:3000/usersCode language: JavaScript (javascript)

works correctly.


Fix 5: Apollo Server and Express

This issue also happens frequently when using Apollo Server with Express.

Many developers configure GraphQL only and forget normal Express routes.


Apollo Server Example

import express from "express";
import { ApolloServer } from "@apollo/server";
import { expressMiddleware } from "@as-integrations/express5";

const app = express();

const server = new ApolloServer({
  typeDefs,
  resolvers,
});

await server.start();

app.use("/graphql", expressMiddleware(server));

app.listen(4000);Code language: JavaScript (javascript)

If you open:

http://localhost:4000/Code language: JavaScript (javascript)

you get:

Cannot GET /

because only /graphql exists.


Apollo Server Fix

Add homepage route:

app.get("/", (req, res) => {
  res.send("GraphQL Server Running");
});Code language: PHP (php)

Now both work:

http://localhost:4000/Code language: JavaScript (javascript)

and

http://localhost:4000/graphqlCode language: JavaScript (javascript)

Fix 6: Frontend and Backend Port Confusion

This is very common in React, Next.js, and Express projects.

Example:

ServicePort
React Frontend3000
Express Backend5000

If backend has only API routes:

app.get("/api/users")Code language: JavaScript (javascript)

then opening:

http://localhost:5000/Code language: JavaScript (javascript)

shows:

Cannot GET /

because backend is API-only.

This is normal behavior.


API-Only Backend Example

app.get("/api/users", (req, res) => {
  res.json(users);
});Code language: PHP (php)

Correct URL:

http://localhost:5000/api/usersCode language: JavaScript (javascript)

Fix 7: Wildcard Route for SPA Applications

Single Page Applications (React, Angular, Vue) need fallback routes.

Without fallback routes, page refreshes may show:

Cannot GET /dashboard

Express SPA Fix

app.use(express.static("build"));

app.get("*", (req, res) => {
  res.sendFile(path.resolve("build/index.html"));
});Code language: PHP (php)

This sends React’s index.html for all routes.


Common Mistakes Developers Make

1. Forgetting Root Route

app.listen(3000);Code language: CSS (css)

without:

app.get("/")Code language: JavaScript (javascript)

2. Wrong Route Order

Wrong

app.get("/:id", handler);

app.get("/users", handler);Code language: JavaScript (javascript)

/:id captures /users.


Correct

app.get("/users", handler);

app.get("/:id", handler);Code language: JavaScript (javascript)

3. Not Exporting Router

Wrong

const router = express.Router();Code language: JavaScript (javascript)

without:

export default router;Code language: JavaScript (javascript)

4. Wrong URL Testing

Testing:

localhost:3000Code language: CSS (css)

instead of:

localhost:3000/api/users

5. Static Folder Misconfiguration

Wrong

app.use(express.static("assets"));Code language: CSS (css)

when folder name is actually:

publicCode language: PHP (php)

Best Practices for Express Routing

Always Create Health Route

app.get("/", (req, res) => {
  res.send("API Running");
});Code language: PHP (php)

This helps debugging.


Use Route Prefixes

Good structure:

/api/users
/api/products
/api/orders

Organize Routes Properly

Recommended Structure

project/
│
├── routes/
├── controllers/
├── middleware/
├── public/
├── server.jsCode language: PHP (php)

Use Express Router

Instead of writing all routes in one file.


Add Error Handling

app.use((req, res) => {
  res.status(404).send("Route Not Found");
});Code language: JavaScript (javascript)

Complete Express Example

import express from "express";
import path from "path";

const app = express();

app.use(express.json());

app.use(express.static("public"));

app.get("/", (req, res) => {
  res.send("Welcome to Express");
});

app.get("/api/users", (req, res) => {
  res.json([
    { id: 1, name: "John" },
    { id: 2, name: "David" }
  ]);
});

app.use((req, res) => {
  res.status(404).send("Page Not Found");
});

app.listen(3000, () => {
  console.log("Server running on port 3000");
});Code language: JavaScript (javascript)

How to Debug “Cannot GET /” Error

Follow this checklist:

Step 1

Check server is running.


Step 2

Verify route exists.


Step 3

Check URL carefully.


Step 4

Verify middleware order.


Step 5

Check static folder configuration.


Step 6

Test API endpoints in Postman.

Useful tool:

Postman

FAQ

Why does Express show Cannot GET /?

Because no route handler exists for /.


Is Cannot GET / an error?

Technically yes, but usually it simply means the route does not exist.


How do I fix Cannot GET / in Express?

Add:

app.get("/", (req, res) => {
  res.send("Hello World");
});Code language: PHP (php)

Why does Apollo Server show Cannot GET /?

Because GraphQL route exists only at:

/graphql

not /.


Conclusion

The “Cannot GET / route Express fix” problem is one of the most common issues in Node.js and Express.js applications.

Fortunately, the solution is usually simple:

  • Add correct routes
  • Configure static files
  • Use routers properly
  • Check URLs carefully
  • Understand API-only backends
  • Configure Apollo Server correctly

Once you understand Express routing, this issue becomes very easy to debug.

If you are building Node.js, Express, GraphQL, or Next.js applications, understanding route handling is an essential skill for backend development.

Leave a Comment

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