Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

NodeJs express.Router resolves to wrong path

I have a router setup like below:

'use strict';

const express = require('express');
const controller = require('../../module/controllers/controller');

const router = express.Router();

router.get('/:param', controller.getEntity);
router.get('/', controller.getEntities);
router.put('/:param', controller.updateEntity);
router.post('/update/:param', controller.updateEntity);
router.get('/subpath', controller.getEntityPath);

module.exports = router;

All the above routes have a parent route: parent

When I try to call http://hostname/parent/subpath it keeps going to http://hostname/parent/. Only when I comment out the below lines, subpath becomes available:

'use strict';

const express = require('express');
const controller = require('../../module/controllers/controller');

const router = express.Router();

// router.get('/:param', controller.getEntity);
// router.get('/', controller.getEntities);
router.put('/:param', controller.updateEntity);
router.post('/update/:param', controller.updateEntity);
router.get('/subpath', controller.getEntityPath);

module.exports = router;

What am I doing wrong in the configuration?

like image 548
kovac Avatar asked Dec 14 '25 02:12

kovac


1 Answers

You need to reverse the order of the routes :

'use strict';

const express = require('express');
const controller = require('../../module/controllers/controller');

const router = express.Router();

router.get('/', controller.getEntities);
router.post('/update/:param', controller.updateEntity);
router.get('/subpath', controller.getEntityPath);
router.get('/:param', controller.getEntity);
router.put('/:param', controller.updateEntity);
module.exports = router;

Because http://hostname/parent/subpath matches /:param first.

like image 123
Hamza Fatmi Avatar answered Dec 16 '25 21:12

Hamza Fatmi