Если я понимаю, что вы делаете с вашим ответом контроллера и вашим общим ответом перехватчика, то вы можете сделать что-то похожее:
import {
Injectable,
NestInterceptor,
ExecutionContext,
CallHandler,
} from '@nestjs/common';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';
export interface Response<T> {
statusCode: number;
message: string;
data: T;
}
@Injectable()
export class TransformInterceptor<T>
implements NestInterceptor<T, Response<T>> {
intercept(
context: ExecutionContext,
next: CallHandler,
): Observable<Response<T>> {
return next
.handle()
.pipe(
map((data) => ({
statusCode: context.switchToHttp().getResponse().statusCode,
message: data.message
data: {
result: data.result,
meta: {} // if this is supposed to be the actual return then replace {} with data.result
}
})),
);
}
}
И сохранить ваш контроллер в виде {message: 'Custom message', result}
.
Другим вариантом, который потребовал бы больше первоначального, но возможно более чистого кода, было бы создание собственного декоратора, который отражал бы значение (сообщение) из класса и метода, а затем извлекал это значение в перехватчике после введения отражателя, но опять же, это потребовало бы больше предварительных усилий для настройки.