民间, 尝试将https://github.com/krakenjs/express-enrouten用于我的控制器。
出于某种原因,我无法获得我想要的行为,并且req.params
根本没有设置。
app.js:
app.use(bodyParser());
var controllerPath = __dirname + '/controllers';
app.use(enrouten({directory: controllerPath }));
pingController.js:
module.exports = function registerRoutes(app){
app.get('/', pong);
};
function pong(req, rsp) {
console.log (req.params);
rsp.set('Content-Type', 'application/json');
var response = {
ping: 'pong',
service: 'ShuttleService',
env: process.env.NODE_ENV,
params: req.params
};
rsp.send(response);
};
问题:
req.params
,则{}
为{param:foo}
而不是http://localhost:3000/pingController?param=foo
http://localhost:3000/
,而是实际的文件名,即http://localhost:3000/pingController/
app.get('/', pong);
替换为app.get('/ping', pong);
,则找不到页面...如何让此控制器用于/ping
uri而不是uri中的文件名?< / LI>
req.query
有效...为什么req.params
没有设定?如何通过req.params
传递?而且,如何获得预期的uri路径行为?
谢谢!
答案 0 :(得分:1)
所以,这里是每个项目的答案:
req.params
在URL的路径中返回路由参数。如果您想使用param
获取参数req.params
,则必须在路径中传递它们,因此您的代码应如下所示:
module.exports = function registerRoutes(app){
app.get('/:param', pong);
};
并将其传递到http://localhost:3000/pingController/foo
之类的网址中。现在,如果您致电req.params
,您将会{ param: foo }
;
这是express-enrouten
模块的工作方式(参见docs)。根据您的代码,您已经定义了您的控制器将位于controllers
目录下。因此,如果您有一个名为pingController
的控制器,则调用它的网址为http://localhost:3000/pingController/
;
如果您将/
更改为/ping
,则到达该网址的网址现为http://localhost:3000/pingController/ping
,依此类推;
req.query
返回网址查询参数(在?
之后,请参阅docs)。当您调用网址http://localhost:3000/pingController?param=foo
时,它会返回您的数据。