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

我正在开发一个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:“他们”说我应该在控制器中哈兰德


catspeake
浏览 99回答 1
1回答

ibeautiful

如果要返回 404 并使用可观察量,可以执行以下操作:@UseGuards(JwtAuthGuard)@UseInterceptors(ClassSerializerInterceptor)@UseFilters(QueryFailedExceptionFilter)@Controller('users')export class UsersController {&nbsp; &nbsp; constructor(private readonly _userService: UsersService) { }&nbsp;@Get(':id')&nbsp; &nbsp; findById(@Param('id', ParseIntPipe) id: number): Observable<User> {&nbsp; &nbsp; &nbsp; &nbsp; return from(this._userService.findById(id)).pipe(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; map(user => {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (!user) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; throw new NotFoundException();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return user;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; })&nbsp; &nbsp; &nbsp; &nbsp; );&nbsp; &nbsp; }我个人喜欢将所有逻辑保留在服务中而不是控制器中,保持控制器精简并且逻辑在大多数情况下可重用。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript