, поэтому я использую Nest Js с TypeORM и MongoDB. Я создал ParseObjectIdPipe для идентификаторов объектов MongoDB, потому что нет встроенного решения
import { PipeTransform, Injectable, BadRequestException } from '@nestjs/common';
import { ObjectID } from 'mongodb';
@Injectable()
export class ParseObjectIdPipe implements PipeTransform<any, ObjectID> {
public transform(value: any): ObjectID {
try {
const transformedObjectId: ObjectID = ObjectID.createFromHexString(value);
return transformedObjectId;
} catch (error) {
throw new BadRequestException('Validation failed (ObjectId is expected)');
}
}
}
Я вызываю URL
localhost: 3000 / modules / 5e4fd05a3f7a4d3f28db5f06
для выполнения функции моего контроллера
@Delete(':id')
public deleteModuleById(@Param('id', ParseObjectIdPipe) id: ObjectID): Promise<void> {
// ...
}
Канал не выдает ошибок и, кажется, возвращает действительное значение. Он попадает только в оператор catch для недействительных идентификаторов. К сожалению, значение становится недействительным до достижения функции контроллера. Когда я снова запускаю это в моем контроллере
try {
ObjectID.createFromHexString(id);
} catch (error) {
throw error;
}
, возникает исключение. Я что-то пропустил? Я хочу проверить правильность идентификатора входящей строки в качестве действительного идентификатора объекта MongoDB и преобразовать / привести его.