【问题标题】:Load an installable hook before native hooks在原生钩子之前加载一个可安装的钩子
【发布时间】:2016-09-01 12:48:47
【问题描述】:

我正在使用sails-hook-sequelize 将sequelize 加载为我的sails 应用程序中的ORM。但是,我的控制器和策略设置(即仅创建它们的方法)取决于模型。在运行控制器和策略挂钩之前,我需要运行sails-hook-sequelize 可安装挂钩(目前它正在运行它并且控制器/策略无法加载)。我怎样才能做到这一点? T

提前致谢。

编辑:这里有一些代码来说明我想要完成的事情:

用户控制器.js

let Endpoint = require('../classes/Endpoint');

let endpoint = new Endpoint(User);

Object.assign(endpoint, {
    find
});

module.exports = endpoint;

function find(req, res, next) {
    User.findAll(
        {
            where: req.query,
            include: [
                {
                    model: Privilege,
                    include: [
                        {
                            model: Account,
                            where: {
                                accountPkey: {
                                    $in: AuthorizationService.accountsForPrivileges(req.tokenData.privileges, ['ADMINISTRATOR', 'OFFICE MANAGER'])
                                }
                            }
                        }
                    ]
                }
            ]
        })
        .then(users => res.ok(users))
        .catch(err => res.serverError(err));
}

基本上,我有一个默认的 Endpoint 类,我实例化然后添加方法。您可以看到 Endpoint 类采用模型参数。但是,当这个钩子运行时,模型还不存在,因为它们是由第三方钩子定义的(使用 sequelize)。

【问题讨论】:

    标签: javascript sails.js


    【解决方案1】:

    目前无法在 Sails 中的核心挂钩之前运行第三方挂钩。

    当我看到这样的问题时,通常是来自试图创建类似 Wordpress 的平台的人,他们假设最终用户创建的每个新“实体类型”(即博客、文章,评论)他们需要一个新模型。另一种方法是创建一个Entity 模型,其contents 属性是与ContentEntityAttribute 模型的关联,这或多或少只是一个键/值存储。然后,您可以使用通配符路由让 EntityController 操作加载正确类型的实体。

    【讨论】:

    • 我编辑了 OP 试图解释我想要完成的事情,也许你有一些想法。我不能真正弄乱模型(我不这么认为),因为我是在一个已经存在的数据库之上构建的,并且有一些经过深思熟虑的架构。
    • 我想我有办法解决这个问题。如何指定我的项目/已安装挂钩的顺序? (即我想创建一个将在sails-hook-sequelize 之后运行的项目挂钩)
    • 这是一个很好的问题,但值得单独发帖,以防其他人也有同样的问题! 这个问题的答案暂时仍然是“你做不到”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-05
    • 2021-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多