简体   繁体   English

express.Router()获取带有可选参数的URL路由

[英]express.Router() get url route with optional parameters

I tried to get optional URL parameter using express.Router(), but it's not working. 我试图使用express.Router()获得可选的URL参数,但是它不起作用。

If I use app.get, it is working correctly: 如果我使用app.get,它将正常工作:

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(). 唯一的问题是,当我尝试通过express.Router()使用这种方法时。 I've tried like this: 我已经试过像这样:

app.js: app.js:

var express = require('express');
var app = express();

var videos = require('./routes/videos');

app.use('/videos/:category', videos);

routes/videos.js: 路线/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/ . 第一种情况是/videos/:category/:category ,第二种情况是- /videos/:category/ You need to move parameter to router.js router.get and remove it from app.js app.use : 您需要将参数移动到router.js router.get并将其从app.js app.use删除:

app.js: app.js:

var express = require('express');
var app = express();

var videos = require('./routes/videos');

app.use('/videos', videos);

routes/videos.js: 路线/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;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM