【问题标题】:Override Sails.js Waterline intercept Find method覆盖 Sails.js 水线拦截 Find 方法
【发布时间】:2020-10-07 21:53:02
【问题描述】:

我有一个名为 Product 的模型。 我想为这个模型配置全面的过滤。

例如:sails.config.field = 2;

当我执行 GET /Product 时,我希望它本质上执行 GET /Product?where={"field": 2}

以上通过添加策略适用于蓝图,但我希望在使用水线 ORM 时行为一致

获取/产品 和 Product.find() 应该返回相同的东西。

我可以覆盖模型:Product.find,它会完美运行...如果我可以通过某种方式访问​​底层查找代码。

我用来截取蓝图的代码是:

if (!req.query.where) {
    req.query.where = `{"status":{">":0,">=":${sails.config.catalogVersions.status}}}`;
  } else {
    const parsedWhere = JSON.parse(req.query.where);
    parsedWhere.status = {
      '>': 0,
      '>=': sails.config.catalogVersions.status,
    };
    req.query.where = JSON.stringify(parsedWhere);
  }

我可以很容易地将它应用到 Model.find 拦截器。

是否有任何方法可以在加载sails 后访问模型上的root find 方法,即使它在加载时被覆盖?

【问题讨论】:

    标签: sails.js waterline


    【解决方案1】:

    也许你可以考虑这样的事情:

    https://github.com/muhammadghazali/sails-hook-pagination

    这是一个钩子,可能适用于您的预期用途。

    【讨论】:

      【解决方案2】:

      我最终使用了 hook:orm:loaded 钩子来运行一些代码,这些代码使用存储在我的每个模型中的 defaultScope 对所有模型进行猴子补丁。它运行良好,因为我可以轻松修改所有模型的默认标准,并在蓝图和基线上获得一致的行为。

      代码见: Is there a way to override sails.js waterline endpoint with custom controller, but keep built in pagination, and filtering?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-06
        相关资源
        最近更新 更多