Feathersjs - >使用动态过滤器和列选择查找服务

时间:2017-11-25 14:11:23

标签: node.js feathersjs feathers-sequelize feathers-hook feathers-service

所以这不是一个真正的问题,更多关于我如何解决这一具体情况的帖子:

期望情况

我希望能够从feathersjs find服务电话中选择数据。但是,我不希望返回所有列,但根据情况不同,并且在结果中也有相关的模型。如果这还不够,我需要通过过滤条件才能在整个选择中使用。此外,它不是在客户端完成,尽可能少,所以操纵不会是风险

开发解决方案

这是我提出的解决方案。我正在使用vuex来从客户端进行api调用,而在后端我使用的是feat-custom-methods来获得一个包含多个方法的服务,所以我可以将每个模块捆绑起来,我称这些服务为{{ 1}}。所以一个人会是例如helper.service方法terms用于特定网站部分的基本选择,getSectionTerms用于管理(返回所有内容)。我没有描述深入的每一步,但可能会在以后做。

第1步: 按照初始文档中的说明安装feather-custom-methods

第2步: 创建服务文件。我就是这样。

getTerms

文件的第一部分是自己制作服务。需要module.exports = function () { const app = this; const helpers = { create () {}, setup (app, path) {}, findTerms(oFilters) { const oTerms = null; return getData( app, oFilters, ['term_type'], ['term_description'], ['metadata_code'], ['metadata_code'] ); } }; app.use('helper_terms', helpers); }; function getData(app, oFilters, arrColTerms, arrColTranslations, arrColLanguage, arrColSection) { return app.service('mtp_sys_app_terms').find({ query: { is_active: oFilters.is_active, $select: arrColTerms }, sequelize: { raw: false, include: [ { model: app.service('/mtp_trans_sys_app_terms').Model, as: 'translations', attributes: arrColTranslations, include: [ { model: app.service('/mtp_sys_app_metadata').Model, as: 'language', attributes: arrColLanguage, where: { metadata_type: 'app_language' } } ] }, { model: app.service('/mtp_sys_app_metadata').Model, as: 'section', attributes: arrColSection, where: { metadata_type: 'app_section' } } ] } }); }; create才能使其正常运行。然后,您可以添加任何所需的方法。由于我将重复这种类型的数据选择,但想要不同的列和过滤器,我做了一个函数来调用初始的featherjs服务查找方法。这是第二部分。它的配置方式使您无需多次重写。好的,在这里和那里我需要添加一些检查并使用默认值进行设置,以防参数未通过。

第3步: 配置要使用的服务。我是在我的setup文件

中完成的
index.js

在此文件中,我将向... app.configure(helper_terms); app.configure(customMethods({ methods: { helper_terms: [ 'findTerms' ] } })); ... 数组中添加更多选项,我在步骤2的文件中创建另一个条目。

第4步: 配置客户端。在我的情况下,通过vuex商店进行调用

helper_terms

这会将过滤条件传递给后端。我仍然用更多选项改变它,但它现在正在工作。我将一个对象传递给后端,其中包含任意数量的过滤器,例如const getters = { getTerms () { return oFilters => api.service('helper_terms') .findTerms( oFilters ); } }; is_active: 0

第5步 在某处调用vuex函数以获取数据

language: 'en'

0 个答案:

没有答案