【问题标题】:Redirect requests via routes sails.js通过路由sails.js 重定向请求
【发布时间】:2014-03-06 08:43:57
【问题描述】:

我想在我的应用程序中有一个子部分: 例如,所有发送到www.example.com/backoffice/user 的请求都应该重定向到我的BackofficeUserController.js

我 uesails.js,我知道我必须使用 config/routes.js 来做,我只是不知道怎么做。

我试过了:

'/backoffice/:controller/:action?': {
    controller    : 'backoffice' + ':controller',
    action        : ':action'
}

但它不起作用。任何想法? 该文档没有过多解释动态路由。 http://sailsjs.org/#!documentation/routes

【问题讨论】:

    标签: javascript node.js routes sails.js


    【解决方案1】:

    这实际上是嵌套控制器的一个不错的用例。如果您执行sails generate controller backoffice/user,您最终会得到一个与名为Backoffice/UserController 的控制器类相对应的controllers/backoffice/userController.js 文件。所有对/backoffice/user/:action 的请求都将自动路由到该控制器。

    【讨论】:

    • 您的意思是,如果我在后台创建控制器,它们将被自动使用?我需要在命令行中执行吗?
    • 实际上,在写此消息之前,我首先尝试过,但没有成功。我在这里再次尝试(0.9.8),但仍然没有。我尝试使用在命令行中生成的控制器,但仍然无法正常工作。
    • 而我的 config/routes.js 只包含 '/' 路由。
    • 不需要使用命令行;您可以自己创建backoffice 文件夹并将userController.js 放入其中。只知道如果要引用config/route.js中的控制器,类名是backoffice/usercontroller
    • 确认也在 v0.9.8 中工作。修复了生成文件正确名称的原始答案(它是userController.js,而不是user.js),并且大写的“C”是有意义的。同样,您不必使用生成器,只需确保正确命名文件即可!
    【解决方案2】:

    所有捕获的参数都会传递给请求对象上控制器的操作方法。也许您在定义路由或使用 UserController 作为代理时应该更加明确。

    你可以有后台用户吗?

    '/user/backoffice': 'UserController.backoffice'
    

    或让后台控制器处理用户请求

    '/backoffice/user/:id': 'BackofficeController.user'
    

    或者(我不确定控制器是否是全局的,但您可以要求另一个控制器的控制器并在 UserController 中使用它的方法)

    module.exports = {
      '/backoffice/user/:id': 'UserController.backoffice'
    };
    

    然后在你的用户控制器中

    var BackofficeController = require('./BackofficeController');
    
    module.exports = {
      user: function(req, res) {
       // Do something using BackOffice methods conditionally?
      }
    };
    

    许多方法可以达到相同的结果。不确定最好的方法是什么,因为我个人没有遇到过这个问题。但我建议坚持 Sailsjs 约定。

    【讨论】:

      猜你喜欢
      • 2015-12-17
      • 1970-01-01
      • 1970-01-01
      • 2013-03-15
      • 1970-01-01
      • 2012-07-30
      • 2013-08-31
      • 2012-03-30
      • 2019-08-02
      相关资源
      最近更新 更多