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
Post a Comment