Я играю с нестами и мангустами.
Код:
class BrevesController {
constructor(private readonly brevesService: BrevesService) { }
// Here is used BreveOwnerGuard(1)
@UseGuards(JwtAuthGuard, BreveOwnerGuard)
@Get(':breveId')
// Here is used ValidateObjectId(3)
async getById(@Param('breveId', ValidateObjectId) id: string) {
return await this.brevesService.getById(id)
}
}
class BreveOwnerGuard {
constructor(private readonly brevesService: BrevesService) { }
async canActivate(context: ExecutionContext) {
const req = context.switchToHttp().getRequest()
const {user, params} = req
const {breveId} = params
// This is executed before ValidateObjectId in getById
// route handler and unknown error is thrown but we
// have pipe for this.(2)
const breve = await this.brevesService.getById(breveId)
const breveCreatorId = breve.creatorId.toString()
const userId = user.id
return breveCreatorId === userId
}
}
Таким образом, после запроса /breves/:breveId с недопустимым идентификатором объекта BreveOwnerGuard выполняется до ValidateObjectId и возникает неизвестная ошибка.
Есть ли способ для этого потока проверить ObjectId перед BreveOwnerGuard?
Или что мне делать в этом случае? Что ожидается?





Guards are executed after each middleware, but before any interceptor or pipe.
Вы мало что можете сделать, кроме как изменить ResourceOwnerGuard на трубу или ValidateObjectId на охранника.