重写Sails.js水线截距查找方法

重写Sails.js水线截距查找方法,sails.js,waterline,Sails.js,Waterline,我有一个名为Product的模型。 我想为这个模型配置全面的过滤 例如:sails.config.field=2 当我得到/Product时,我希望它本质上得到/Product?where={“field”:2} 上面通过添加策略对blueprint有效,但我希望在使用水线ORM时行为一致 GET/Product 和Product.find()应该返回相同的内容。 我可以覆盖模型:Product.find,它将完美地工作。。。如果有什么方法可以让我访问底层的find代码 我用来截取蓝图的代码是:

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

例如:
sails.config.field=2

当我得到/Product时,我希望它本质上得到/Product?where={“field”:2}

上面通过添加策略对blueprint有效,但我希望在使用水线ORM时行为一致

GET/Product 和Product.find()应该返回相同的内容。

我可以覆盖模型:Product.find,它将完美地工作。。。如果有什么方法可以让我访问底层的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方法?

也许您可以考虑这样的方法:


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

也许您可以考虑这样一个:


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

我最终使用hook:orm:loaded钩子来运行一些代码,这些代码使用存储在我的每个模型中的defaultScope对所有模型进行了MonkeyPatch。它工作得很好,因为我可以轻松地修改所有模型的默认条件,并在blueprint和waterline中获得一致的行为

有关代码,请参阅:

最后,我使用hook:orm:loaded钩子来运行一些代码,这些代码使用存储在我的每个模型中的defaultScope来修补所有模型。它工作得很好,因为我可以轻松地修改所有模型的默认条件,并在blueprint和waterline中获得一致的行为

有关代码,请参阅: