【问题标题】:Controller with multi action in Express.JS?Express.JS 中的多动作控制器?
【发布时间】:2017-05-13 15:12:11
【问题描述】:

我正在通过 Express 进行路由。我的应用程序加载所有控制器,每个控制器都有多个动作。但是,在我的控制器中,Express Router 只是在我的控制器中加载默认操作并与所有其他操作一起出错

无法获取 /index/action1234


更具体地说,这是我的代码。
app.js 中的路由

fs.readdirSync('./controllers').forEach(function (file) {
    if(file.substr(-3) == '.js') {
        app.use(require('./controllers/' + file));
    }
});


控制器 index.js

var express = require('express');
var router = express.Router();
router.get('/', function(req, res) {
    res.send("index/index");
});
router.get('/:action', function(req, res) {
    res.send("index/"+req.params.action);
});
module.exports = router;

我是否必须将“app”参数传递给控制器​​并使用它而不是路由器模块?
谢谢

【问题讨论】:

  • 哼 ....实际上你的应用程序处理 /action1234 但不是 /index/action1234
  • 是的,我的错误是那不是嵌套路由器。
  • 您可以将/index 作为app.use(require('./controllers/ + file)); 中的第一个参数,但它会为您的所有未来路线执行此操作,或者您可以将所有“前缀”路线以相同的顺序放入数组中您在控制器目录中的文件并对其进行迭代。但这意味着每次创建控制器时都必须填充这个数组
  • @mJehanno 谢谢!但我提前解决了我的问题。我在下面更新了一个答案。

标签: node.js express


【解决方案1】:

我通过在加载所有控制器时添加路径参数解决了我的问题。

fs.readdirSync('./controllers').forEach(function (file) {
    if(file.substr(-3) == '.js') {
        app.use('/'+file.substr(0, file.length - 3), require('./controllers/' + file));
    }
});

谢谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-17
    • 2012-08-23
    • 1970-01-01
    • 2012-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多