关于javascript:如何使用自定义查询方法来扩展水线?

How to extend waterline with custom query methods?

我想为水线创建并使用一些自定义查询方法。

例如方法makeItAwesome

1
2
3
4
5
Article.makeItAwesome({
    id: 42
}).exec(function(err, awesomeArticle) {
    /* ... */
});

当然我可以将此makeItAwesome添加到模型的静态方法中,但是如果我想将常见的东西可重用于其他模型该怎么办。 Sails.js或waterline本身是否具有内置的执行方式,还是我应该自己执行?

如果不是,保留这些东西的最佳方法在哪里?每个模型都必须是一个单独的模块,还是我可以在某个地方扩展每个模型原型一次?


您可以将所需的方法放在通用js文件中的每个模型上,并使用lodash使用这些默认值扩展模型。或在定义模型时简单地引用导入的操作。

module.exports = _.extends(makeItAwsomeDefinition,{thisModelDefinition})

-或-

您可以将默认方法添加到config / models.js文件中

-或-

如果您仅使用蓝图,则可以创建自定义操作并将其放入api / blueprints

-或-

我可能会使用的一种更简单的方法是创建服务并将自定义方法放在其中。 ModelMethodsService.makeItAwsome('MODELNAME',{structOfQueryParams})

参考文献

  • 模型/控制器原型继承
  • 继承Sails.js模型的属性和生命周期功能
  • 自定义蓝图操作
  • 创建服务