我正在开发一个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;
})
);
}
我个人喜欢将所有逻辑保留在服务中而不是控制器中,保持控制器精简并且逻辑在大多数情况下可重用。
添加回答
举报
0/150
提交
取消