如何使用自定义查询方法扩展基线?
How to extend waterline with custom query methods?
我想为水线创建和使用一些自定义查询方法。
例如方法makeItAwesome
:
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})
参考资料
- Model/Controller prototype inheritence
- Inherit attributes and lifecycle functions of Sails.js models
- Custom blueprint actions
- Creating Services
我想为水线创建和使用一些自定义查询方法。
例如方法makeItAwesome
:
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})
参考资料
- Model/Controller prototype inheritence
- Inherit attributes and lifecycle functions of Sails.js models
- Custom blueprint actions
- Creating Services