所以这不是一个真正的问题,更多关于我如何解决这一具体情况的帖子:
期望情况
我希望能够从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'