Перейти до основного вмісту

Exception filters

To access the I18nContext inside your exception filters use the I18nContext.current() helper function.

src/test.filter.ts
import {
ArgumentsHost,
Catch,
ExceptionFilter,
HttpException,
} from '@nestjs/common';
import { I18nContext } from '@softkit/i18n';

@Catch()
export class TestExceptionFilter implements ExceptionFilter {
catch(exception: HttpException, host: ArgumentsHost) {
const i18n = I18nContext.current<I18nTranslations>(host);
const response = host.switchToHttp().getResponse<any>();

console.log('current language', i18n.lang);

response.status(500).send(`Your language is: ${i18n.lang}`);
}
}
обережно

When using http or graphql @softkit/i18n uses middleware to make things work. However when throwing exceptions in middleware this can lead to throwing your exception before the @softkit/i18n middleware had been reached. To solve this problem you'll need to register the I18nMiddleware globally.

src/main.ts
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { I18nMiddleware } from '@softkit/i18n';

async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.use(I18nMiddleware);
await app.listen(3000);
}
bootstrap();

or

src/app.module.ts
import { MiddlewareConsumer, Module, NestModule } from '@nestjs/common';
import { I18nMiddleware } from '@softkit/i18n';

@Module({
...
})
export class AppModule implements NestModule {
configure(consumer: MiddlewareConsumer) {
consumer.apply(I18nMiddleware, MyMiddleware).forRoutes('*');
}
}