yus*_*enn 2 cqrs node.js typescript nestjs
我在我的应用程序后端使用nestjs。我使用cqrs模块https://github.com/nestjs/cqrs,我读到cqrs有一个命令来写入操作和查询来读取操作,但是nestjs文档(https://docs .nestjs.com/recipes/cqrs)只有一个命令示例,那么如何在nestjs中实现查询?
查询由QueryHandler处理。他们实现IQueryHandler这要求你有一个异步execute函数。Observable我个人的偏好是从控制器执行的查询处理程序返回一个,这在 NestJS 应用程序中得到完全支持。
这是一个查询示例:
class GetSomeStuff {
constructor(
readonly id: string;
) {}
}
Run Code Online (Sandbox Code Playgroud)
端点:
import { QueryBus } from '@nestjs/cqrs';
class SomeController {
constructor(private queryBus: QueryBus) {}
@Get('some-stuff')
getSomeStuff() {
return this.queryBus.execute(new GetSomeStuff('foo_id'));
}
}
Run Code Online (Sandbox Code Playgroud)
查询处理程序:
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))
);
}
}
Run Code Online (Sandbox Code Playgroud)
Query Handlers放置在providers模块的部分中,如下所示:
@Module({
imports: [
CqrsModule,
SharedStuffDataModule,
],
providers: [ GetSomeStuffHandler ],
})
export class QueriesModule {}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5367 次 |
| 最近记录: |