带有pathvariables的ExpressJS中的链接路由

我正在尝试开发一个在Node.js中链接Express路由的系统。 这个想法是,你可以有一个像这样的url:

api.foo/<someFooId>/bar/<someBarId> 

根js文件将有

 var express = require('express'); var app = express(); var foo = require('./routes/foo'); app.use('/foo', foo); 

那么routes/foo.js将是:

 var express = require('express'); var router = express.Router(); var bar = require('./bar'); app.use('/:fooId/bar', bar); 

那么上面显示的URL模式最终将由routes/bar.js处理:

 var express = require('express'); var router = express.Router(); router.get('/:barId', function(req, res) { ... } 

这个系统正确地将请求路由到上面的URL模式到bar的路由,但是, req对象不包含fooId 。 我想知道是否有人知道我的bar路线访问fooId

我会做Datsik所说的, router.get('api/foo/:fooId/bar/:barId')

如果你绝对需要保持这两个独立的,你可以附加的价值:fooid要求,然后附上bar路线。

就像在Foo.js中

 router.get('/api/foo/:fooId', function (req, res, next) { // build data on request. req.fooId = req.params.fooId; req.test = 'this is how you add data to req'; next(); }); // attach bar router.get('/api/foo/:fooId', require('./bar')); 

在bar.js中

 router.get('/bar/:barId', function (req, res, next) { var fooId = req.fooId; // its getting the value from `req` }) 

如果你碰巧读过它,忘记我之前写的所有内容

你将不得不把params留给路由器本身。 也就是说,路由器有正则expression式,并进行匹配,以获取url中的参数。

所以如果你想要的参数,你将不得不这样做:

 var express = require('express'); // helper to get some info function info(req){ var params = JSON.stringify(req.params); return ( '<ul>' + '<li>' + ' path: ' + req.originalUrl + '</li>' + '<li>' + ' params: ' + params + '</li>' + '</ul>' ); } var fooRouter = express.Router(); fooRouter.get('/:id', function(req, res){ res.send(info(req)); }); fooRouter.get('/:id/bar', function(req, res){ res.send(info(req)); }); var app = express(); app.use('/page', fooRouter); app.listen(3000, function(){ console.log('server listening on http://localhost:3000'); });