javascript - Express js get parameters from root of URL (Not as simple as req.params) -


i've made api , i've routed follows:

in main routes file:

  //with sub-route   app.use('/api/test/:test', require('./api/test'));    //without sub-route   app.use('/api/test2/:test', function(req, res){     console.log('in test', req.params, req.body);     return res.status(200).json({params: req.params, body: req.body});   }); 

accessing second route displays :test in req.params, expected.

in modular routes folder ('./api/test') have sub-router (index.js) looks this:

router.get('/:test2', controller.getitem); 

with handler:

exports.getitem = function getitem(req, res) {   console.log('in getitem \nreq.params', req.params, '\nreq.body: ', req.body);   return res.status(200).json({yes: 'yes', params: req.params, body: req.body}); }; 

so first url, has no sub-routing is: /api/test2/:test , logs out whatever put in place of :test in req.params.

the second url, has sub-routing is: /api/test/:test/:test2, when send request only :test2 appears in req.params.

it seems if use pattern variables in 'root' of route (ie in primary router) not picked up.

is there way fix this?

thanks

you need middleware fix you:

function paramfix(req, res, next) {     req._params = req.params;     next(); } app.use('/api/test/:test', paramfix, require('./api/test')); 

and use req._params.test in last callback function.

so reflect multiple levels of mounting can extend middleware this:

function paramfix(req, res, next) {     req._params = req._params || {};     (var key in req.params) {         if (req.params.hasownproperty(key)) {             req._params[key] = req.params[key];         }     }     next(); } app.use('/api/test/:test', paramfix, require('./api/test')); 

Comments