为了账号安全,请及时绑定邮箱和手机立即绑定

如何正确使用嵌套的可观察量?

如何正确使用嵌套的可观察量?

catspeake 2022-09-29 10:21:46
我正在开发一个API,可以汉德用户(只是为了简单起见)做基本的crud操作。我得到了用户服务,如下所示:    @Injectable()    export class UsersService {        constructor(            @InjectRepository(User)            private usersRepository: Repository<User>,        ) { }...        async findById(id: number): Promise<User> {            return this.usersRepository.findOne(id);    }和控制器:@UseGuards(JwtAuthGuard)@UseInterceptors(ClassSerializerInterceptor)@UseFilters(QueryFailedExceptionFilter)@Controller('users')export class UsersController {    constructor(private readonly _userService: UsersService) { } @Get(':id')    findById(@Param('id', ParseIntPipe) id: number): Observable<User> {        return from(this._userService.findById(id));    }这有效,我可以找到,创建,删除等。问题是,如果我尝试 finOne 用户( Get(:id) 从我的控制器 ) 并且如果它不存在,它只是返回一个 200 ok 而没有对客户端的响应,但它应该是一个 404,因为找不到资源。阅读我理解的文档(希望我做对了),我们可以返回一个可观察的,它将被自动转录。所以问题是,如果findOne的结果为空,在哪里以及如何汉尔德,并返回具有适当状态的响应,当然使用可观察量。我试图找到一些例子,但我只找到几个使用承诺的例子,大多数时候他们只是忽略了找不到用户的情况。PD:“他们”说我应该在控制器中哈兰德
查看完整描述

1 回答

?
ibeautiful

TA贡献1993条经验 获得超5个赞

如果要返回 404 并使用可观察量,可以执行以下操作:


@UseGuards(JwtAuthGuard)

@UseInterceptors(ClassSerializerInterceptor)

@UseFilters(QueryFailedExceptionFilter)

@Controller('users')

export class UsersController {


    constructor(private readonly _userService: UsersService) { }


 @Get(':id')

    findById(@Param('id', ParseIntPipe) id: number): Observable<User> {

        return from(this._userService.findById(id)).pipe(

          map(user => {

            if (!user) {

              throw new NotFoundException();

            }

            return user;

          })

        );

    }

我个人喜欢将所有逻辑保留在服务中而不是控制器中,保持控制器精简并且逻辑在大多数情况下可重用。


查看完整回答
反对 回复 2022-09-29
  • 1 回答
  • 0 关注
  • 98 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信