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