Apollo GraphQL自定义数据源设置默认筛选器
对于Apollo GraphQL服务器自定义数据源,向每个数据库查询添加默认where子句的最佳方法是什么Apollo GraphQL自定义数据源设置默认筛选器,graphql,apollo,Graphql,Apollo,对于Apollo GraphQL服务器自定义数据源,向每个数据库查询添加默认where子句的最佳方法是什么 where isDeleted = false 使用Apollo GraphQL服务器,我创建了一个自定义数据源。数据源只是从数据库获取数据 class CustomDataSource extends DataSource { 我扩展了CustomDataSource,以便可以向其中添加特定于项目的详细信息。i、 e.CustomDataSource应该是普通的,可以跨项目重用,而M
where isDeleted = false
使用Apollo GraphQL服务器,我创建了一个自定义数据源。数据源只是从数据库获取数据
class CustomDataSource extends DataSource {
我扩展了CustomDataSource,以便可以向其中添加特定于项目的详细信息。i、 e.CustomDataSource应该是普通的,可以跨项目重用,而MyProjectDataSource可以包含特定于项目的业务规则
class MyProjectDataSource extends CustomDataSource {
My GraphQL查询接受过滤器参数,CustomDataSource将过滤器应用于数据库查询
type Query {
users(filter: JSON): [User]
}
我的customDataSource是最重要的,所以它包含返回所有查询数据的连接
实施理念
我找不到任何阿波罗服务器架构来帮助实现这一功能。因此,我决定使用这种简化方法:
class CustomDataSource extends DataSource {
// Override this method in MyProjectDataSource (optional).
static onFilterEvent(args, info, eargs) {
return eargs;
}
// Add filter.
eargs = { filter: get(args, 'filter') };
eargs = this.constructor.onFilterEvent(this.args, this.info, eargs);
if (eargs.filter) {
// Run database query with modified filter in eargs.filter.
}
}
// CustomDataSource to emit event (and pass filter argument).
eventEmitter.emit('filter', ...
// MyDataSource to listen for event (and override filter argument).
eventEmitter.on('filter', ...
class CustomDataSource extends DataSource {
// Override this method in MyProjectDataSource (optional).
static onFilterEvent(args, info, eargs) {
return eargs;
}
// Add filter.
eargs = { filter: get(args, 'filter') };
eargs = this.constructor.onFilterEvent(this.args, this.info, eargs);
if (eargs.filter) {
// Run database query with modified filter in eargs.filter.
}
}
class MyProjectDataSource extends CustomDataSource {
static onFilterEvent(args, info, eargs) {
eargs.filter = { isDeleted: false }; // TODO: If existing filter then use and clause.
return eargs;
}
}