Express JS redirect to default page instead of "Cannot GET"

17,871

Solution 1

Try to add the following route as the last route:

app.use(function(req, res) {
    res.redirect('/');
});

Edit:

After a little researching I concluded that it's better to use app.get instead of app.use:

app.get('*', function(req, res) {
    res.redirect('/');
});

because app.use handles all HTTP methods (GET, POST, etc.), and you probably don't want to make undefined POST requests redirect to index page.

Solution 2

JUst try to put one get handler with * after all your get handlers like bellow.

app.get('/', routes.getHomePage);//When `/` get the home page

app.get('/login',routes.getLoginPage); //When `/login` get the login page

app.get('*',routes.getHomePage); // when  any other of these both then also homepage.

But make sure * should be after all, otherwise those will not work which are after * handler.

Share:
17,871

Related videos on Youtube

Srivathsa
Author by

Srivathsa

In a mission to teach machines in order to understand the world better. Machine Learning researcher and AI enthusiast. Good experience in a wide variety of web technologies.

Updated on September 14, 2022

Comments

  • Srivathsa
    Srivathsa over 1 year

    I am using express JS and I have a set of routes that I have defined as follows

    require('./moduleA/routes')(app);
    require('./moduleB/routes')(app);
    

    and so on. If I try to access any of the routes that I have not defined in the above routes, say

    http://localhost:3001/test
    

    it says

    Cannot GET /test/
    

    But instead of this I want to redirect to my app's index page. I want this redirection to happen to all of the undefined routes. How can I achieve this?