Rifat Bin Reza
Rifat Bin Reza

Reputation: 2761

Express route calling parent route again

I have an express route like,

in router/blog.js

router.get('/', middleware.isLoggedIn, function(req,res){
//some code
res.render('blogs');
})

...(i)

Then i have another route for adding a blogs like,

router.get('/new', middleware.isLoggedIn, function(req,res){
//some code
res.render('newBlog');
})

...(ii)

The problem is, when i am going to /blogs/new in my browser, the code from (i) executes also but it doesn't render the blogs template.

why is (ii) hitting (i)?

Update

This is the middleware:

middleware.isLoggedIn = function (req, res, next) {
if (req.session.isLoggedIn) { //this will be true if the user is autenticated
  return next();
 } else {
   req.flash('login','Please Login First!');
   res.redirect('/login');
  }
};

in app.js:

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

var blog = require('./routes/blog');
app.use('/blogs', blog);

Upvotes: 1

Views: 907

Answers (1)

xtj7
xtj7

Reputation: 578

I think your error may be somewhere else in your code and a more complete example may help in spotting that.

This simple example works as intended and only calls the route and the middleware once, hitting the correct one.

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

app.get('/blogs', testMiddleware, (req, res) => {
    res.json({'route': 'blogs'});
});

app.get('/blogs/new', testMiddleware, (req, res) => {
    res.json({'route': 'blogs-new'});
});

function testMiddleware(req, res, next) {
    console.log(req.url);
    next();
}

app.listen(3000);

Can you provide some more code? Are you 100% sure that the middleware is hit twice (or from the wrong route)?

Upvotes: 1

Related Questions