Skip to content
Advertisement

How can I always replace a certain path parameter to another value in node.js?

My code example:

router.get('/name/:name/height', (req,res) => {
    ...
}

router.get('/name/:name/weight', (req,res) => {
    ...
}

router.get('/age/:age/height', (req,res) => {
    ...
}

router.get('/age/:age/weight', (req,res) => {
    ...
}

Here, when name comes as foo, I want to replace it to bar because foo is an alias of bar.

But inserting if-replace codes into all the blocks repeatedly doesn’t look good.

Is there any other option to implement this??


I tried with:

router.use('/name/:name', (req, res, next) => {
    let name = req.params.name
    if (name === 'foo') {
        console.log("HHHHHHHHHHHHHHHHHHH")
        req.params.name = 'bar'
    }
    next()
    }
)

That HHH... log is printed, but the req.params.name doesn’t seem to be updated.

Advertisement

Answer

If foo is indeed an alias for bar, I’d suggest you respond with a 301 Redirect response for the foo endpoint with something like this:

router.get('/name/foo/:path', (req, res) => {
  res.redirect(301, '/name/bar/' + req.path);
});
User contributions licensed under: CC BY-SA
7 People found this is helpful
Advertisement