I tried to get optional URL parameter using express.Router(), but it's not working.
If I use app.get, it is working correctly:
app.get('/videos/:category', function(req, res){
// localhost:9876/videos/music
debug(req.params); // This is working as expected
});
The only problem is when I try to use like this using express.Router(). I've tried like this:
app.js:
var express = require('express');
var app = express();
var videos = require('./routes/videos');
app.use('/videos/:category', videos);
routes/videos.js:
var express = require('express');
var router = express.Router();
router.get('/:category', function(req, res){
debug(req.params, req.params.category); // req.params is empty {}
});
module.exports = router;
I've also tried like this:
router.get('/', function(req, res){
debug(req.params, req.params.category); // req.params is empty {}
});
How to solve this properly? Thanks.
In your both solutions you are getting the wrong route. In the first case it's /videos/:category/:category
, in the second case - /videos/:category/
. You need to move parameter to router.js router.get
and remove it from app.js app.use
:
app.js:
var express = require('express');
var app = express();
var videos = require('./routes/videos');
app.use('/videos', videos);
routes/videos.js:
var express = require('express');
var router = express.Router();
router.get('/:category', function(req, res){
debug(req.params, req.params.category); // req.params is empty {}
});
module.exports = router;
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.