全栈之路 您所在的位置:网站首页 前端NGINX不同环境配置不同参数 全栈之路

全栈之路

2023-07-04 15:23| 来源: 网络整理| 查看: 265

当构建 Nest 应用程序时,全局配置非常重要。它允许你在整个应用程序中统一配置环境变量、全局返回参数和异常拦截等设置

环境变量配置

在开发应用程序时,使用环境变量可以轻松地管理不同环境下的配置。下面是使用 yaml 的示例(安装插件过程已省略)

首先,新建 .dev.yaml 文件,有其他环境的可创建多个配置文件,随便写入些变量: MYSQL_CONFIG: name: "test" type: "mysql" host: "localhost" port: 3306 username: "root" password: "root" database: "test" entities: "mysql" synchronize: true 创建一个工具函数读取配置 utils/index.ts: import { parse } from 'yaml'; const path = require('path'); const fs = require('fs'); export const getConfig = () => { // 此处可根据环境读取不同的配置文件 const yamlPath = path.join(process.cwd(), `./.config/.dev.yaml`); const file = fs.readFileSync(yamlPath, 'utf8'); const config = parse(file); return config; }; 在应用程序的入口文件中,引入并加载环境变量:

安装 @nestjs/config

pnpm i @nestjs/config // app.module.ts import { ConfigModule } from '@nestjs/config'; import { getConfig } from './utils'; @Module({ ... imports:[ ConfigModule.forRoot({ ignoreEnvFile: true, isGlobal: true, load: [getConfig], }), ] }) 在应用程序中使用环境变量: import { getConfig } from '@/utils/index'; const { MYSQL_CONFIG } = getConfig(); console.log(MYSQL_CONFIG.name) // user-test 全局返回参数配置

Nest 提供了一个装饰器 @UseInterceptors,可以在应用程序的全局范围内配置全局返回参数。

创建一个全局的返回参数拦截器: import { Injectable, NestInterceptor, ExecutionContext, CallHandler, } from '@nestjs/common'; import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; interface Response { data: T; } @Injectable() export class TransformInterceptor implements NestInterceptor { intercept( context: ExecutionContext, next: CallHandler, ): Observable { return next.handle().pipe( map((data) => ({ data, status: 0, message: 'message', })), ); } }

在上述示例中,我们创建了一个名为 TransformInterceptor 的全局返回参数拦截器,它将每个响应的数据封装在一个对象中。

在应用程序的入口文件 main.ts 中,将全局返回参数拦截器应用到全局范围: import { NestFactory } from '@nestjs/core'; import { AppModule } from './app.module'; import { TransformInterceptor } from './transform.interceptor'; async function bootstrap() { const app = await NestFactory.create(AppModule); app.useGlobalInterceptors(new TransformInterceptor()); // ... await app.listen(3000); } bootstrap();

现在,全局返回参数拦截器已经应用到应用程序的全局范围。

全局异常拦截配置

Nest 提供了一个装饰器 @Catch,可以在应用程序的全局范围内配置全局异常拦截器。

创建一个全局的异常拦截器: import { ExceptionFilter, Catch, ArgumentsHost } from '@nestjs/common'; @Catch() export class AllExceptionsFilter implements ExceptionFilter { catch(exception: any, host: ArgumentsHost) { const ctx = host.switchToHttp(); const response = ctx.getResponse(); const status = exception instanceof HttpException ? exception.getStatus() : 500; response.status(status).json({ statusCode: status, message: exception.message || 'Internal server error', }); } }

在上述示例中,我们创建了一个名为 AllExceptionsFilter 的全局异常拦截器,它将所有异常统一返回为 JSON 格式的响应。

在应用程序的入口文件中,将全局异常拦截器应用到全局范围: import { NestFactory } from '@nestjs/core'; import { AppModule } from './app.module'; import { AllExceptionsFilter } from './all-exceptions.filter'; async function bootstrap() { const app = await NestFactory.create(AppModule); app.useGlobalFilters(new AllExceptionsFilter()); // ... await app.listen(3000); } bootstrap();

现在,全局异常拦截器已经应用到应用程序的全局范围。

总结

在本篇博客中,我们学习了如何在 Nest 中进行全局配置。我们了解了如何配置环境变量、全局返回参数和全局异常拦截器。这些全局配置有助于我们在应用程序中统一管理和处理配置、返回参数和异常。

希望本篇博客对你有所帮助!如果你还有其他问题或需要进一步的帮助,请随时提问。祝你在 Nest 开发中取得成功!



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有