Skip to content

Instantly share code, notes, and snippets.

@ahsanzizan
Created January 12, 2024 16:35
Show Gist options
  • Save ahsanzizan/1f0e5c3ed6e955203420b392667b413a to your computer and use it in GitHub Desktop.
Save ahsanzizan/1f0e5c3ed6e955203420b392667b413a to your computer and use it in GitHub Desktop.
Response Transform Interceptor for Nest.JS
import {
Injectable,
NestInterceptor,
ExecutionContext,
CallHandler,
} from '@nestjs/common';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';
export interface ResponseTemplate<T> {
message: string;
data: T;
}
interface Response<T> {
message: string;
statusCode: number;
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: ResponseTemplate<T>) => ({
message: data.message,
statusCode: context.switchToHttp().getResponse<{ statusCode: number }>()
.statusCode,
data: data.data,
})),
);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment