NodeJS Express req.params,enrouten控制器工作不正常

NodeJS Express req.params, enrouten controllers not working properly

本文关键字:控制器 工作 不正常 enrouten Express req params NodeJS      更新时间:2023-09-26

各位,尝试使用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);
};

问题:

  1. 如果我命中http://localhost:3000/pingController?param=foo,则req.params{}而不是{param:foo}
  2. 到页面的路径不是http://localhost:3000/,而是实际的文件名,即http://localhost:3000/pingController/
  3. 如果我用app.get('/ping', pong);替换app.get('/', pong);,则找不到页面。。。我如何让这个控制器为/ping uri而不是uri中的文件名工作
  4. req.query工作。。。为什么req.params没有设置好

我该如何让恩鲁滕通过req.params?此外,如何获得预期的uri路径行为?

谢谢!

因此,以下是每个项目的答案:

  1. req.params在URL的路径中返回路由参数。如果你想用req.params获得参数param,你必须在路径中传递它们,所以你的代码应该看起来像:

    module.exports = function registerRoutes(app){
      app.get('/:param', pong);
    };
    

    并像CCD_ 17一样在URL中传递。现在,如果你调用req.params,你就会得到{ param: foo }

  2. 这就是express-enrouten模块的工作方式(请参阅文档(。根据您的代码,您已经定义了控制器将位于controllers目录下。因此,如果您有一个名为pingController的控制器,那么调用它的URL是http://localhost:3000/pingController/

  3. 如果将/更改为/ping,则要访问的URL现在为http://localhost:3000/pingController/ping,依此类推;

  4. req.query返回URL查询参数(在?之后,请参阅文档(。也就是说,当您调用URL http://localhost:3000/pingController?param=foo时,它会返回您的数据。