如何使用cqrs模块在nestjs中进行查询?

时间:2018-08-18 13:50:32

标签: node.js typescript cqrs nestjs

我在应用后端中使用nestjs。我使用cqrs模块https://github.com/nestjs/cqrs,我看到cqrs具有命令来编写操作和查询来可以读取操作,但nestjs文档(https://docs.nestjs.com/recipes/cqrs)仅具有命令示例,因此如何在nestjs中实现查询?

2 个答案:

答案 0 :(得分:0)

没有单个推荐的解决方案。 CQRS模块全部涉及写端,而读端则简单得多,复杂程度也较低。使用适合您要求的任何东西。 https://github.com/nestjs/nest/issues/985

答案 1 :(得分:0)

查询由QueryHandlers处理。它们实现| NAME | NUMBER | |-------|---------| |Joe |456 | |Brian |420 | |Raine |143 | ,这要求您具有异步IQueryHandler函数。我的个人偏好是从正在从控制器which is fully supported in NestJS applications执行的查询处理程序中返回execute

这是查询示例:

Observable

端点:

class GetSomeStuff {
  constructor(
    readonly id: string;
  ) {}
}

查询处理程序:

import { QueryBus } from '@nestjs/cqrs';

class SomeController {
  constructor(private queryBus: QueryBus) {}

  @Get('some-stuff')
  getSomeStuff() {
    return this.queryBus.execute(new GetSomeStuff('foo_id'));
  }
}

import { GetSomeStuff } from '@app/shared/util-queries'; import { SharedStuffDataService } from '@app/shared/stuff/data-access' import { GetSomeStuffDto } from '@app/shared/util-models'; import { IQueryHandler, QueryHandler } from '@nestjs/cqrs'; import { from } from 'rxjs'; import { map } from 'rxjs/operators'; @QueryHandler(GetSomeStuff) export class GetSomeStuffHandler implements IQueryHandler<GetSomeStuff> { constructor( private readonly dataService: SharedStuffDataService, ) {} async execute(query: GetSomeStuff) { const stuffRepo = this.dataService.connectToReadModel(); return from(stuffRepo.getOneById(query.id)).pipe( map(stuff => new GetSomeStuffDto(stuff)) ); } } 被放置在模块的Query Handlers部分中,如下所示:

providers