1、nest项目创建
通过npm下载全局nest框架
创建项目 nest new XXX(项目名)
这里项目初始化目录就不再介绍了!
2、dotenv通过对.env文件举行解析,添加到process.env对象
注:process在node中是一个全局对象,提供node.js进程的信息和一些控制该进程的方法;process.env对象包含了当进步程的环境变量,如process.env.PATH.
安装dotenv
- npm install dotenv --save
复制代码 在项目目录下创建.env文件
.env 默认配置文件
- DB_TYPE = mysql
- DB_HOST = 127.0.0.1
- DB_PORT = 3306
- DB_SYNC = false
复制代码 .env.development 开发环境配置文件
- DB_DATABASE = typeorm2
- DB_HOST = 127.0.0.1
- DB_PORT = 3306
- DB_USERNAME = root
- DB_PASSWORD = xxxxx
复制代码 .env.production 生产环境配置文件
-----这里就不做了,可以根据本身需要设置
.env.test 测试环境配置文件
------这里就不做了
当然重点是下面的nest/config
3、nest/config
在 NestJS 框架中,nest/config 是一个用于处理配置的模块,它允许你以一种结构化和可维护的方式管理应用步伐配置。nest/config 模块提供了一个 ConfigService,这是一个依赖注入服务,用于访问配置值。
安装nest/config
- npm i --save @nestjs/config
复制代码 在app.module中导入configModule(可以把config看成一个模块,我们可以在项目中应用他的服务ConfigService)、dotenv
- import * as dotenv from 'dotenv';
- import { ConfigModule, ConfigService } from '@nestjs/config';
复制代码 判定环境,设置加载的.env文件
- const envFilePath = `.env.${process.env.NODE_ENV || `development`}`;
复制代码 在module中引入配置模块
- ConfigModule.forRoot({
- // 配置全局使用
- isGlobal:true,
- // 加载文件目录,开发环境即加载.env.development配置,此属性不写,则可以获取到.env的配置信息
- envFilePath,
- // ()=>dotenv.config({path:'.env'})默认加载了.env [portConfig先不写,稍后再说]
- load:[portConfig,()=>dotenv.config({path:'.env'})],
- // 数据校验,先不写
- //validationSchema
- }),
复制代码 然后我们可以测试一下ConfigService,在app.controller中引入ConfigService,调用ConfigService.get('string')方法
- import { Controller, Get } from '@nestjs/common';
- import { ConfigService } from '@nestjs/config';
- import { AppService } from './app.service';
- @Controller()
- export class AppController {
- constructor(private readonly appService: AppService,
- private configService: ConfigService) {}
- @Get()
- getHello(): string {
- console.log(this.configService.get('PORT'));
- return this.appService.getHello();
- }
- }
复制代码 启动服务npm run start,访问接口
这里为了加深理解,我们设置一下启动端口的配置文件
在.env中添加PORT = 3033
在src目录下创建一个config文件,添加一个port.config.ts
- export default ()=>({
- // 如果环境中不存在启动端口,就使用端口3000
- port: parseInt(process.env.PORT , 10) || 3000
- })
复制代码 app.module里引入,并且在configmodule.forRoot中加载,加载后,就可以通过configService.get
方法获取
- import portConfig from './config/port.config';
复制代码
在main.ts中导入configService
- import { ConfigService } from '@nestjs/config';
复制代码 实例化ConfigService,获取port
- // 获取configService服务实例
- const configService = app.get(ConfigService);
- const port = configService.get<number>('port')
复制代码 设置port,设置之后,我们就可以通过配置.env的PORT设置修改端口
4、typeorm
安装typeorm环境 typeorm的nest配置文件 typeorm文件 mysql连接库文件
- npm install --save @nestjs/typeorm typeorm mysql2
复制代码 app.module导入
- import { TypeOrmModule, TypeOrmModuleAsyncOptions } from '@nestjs/typeorm';
复制代码 配置typeormmodule模块
- TypeOrmModule.forRootAsync({
- useFactory: ()=>
- ({
- //通过process.env对象获取也没有问题
- type:process.env.DB_TYPE,
- //推荐使用configService获取 configService.get('DB_HOST')
- host: ,
- port:,
- username:,
- password: ,
- database: ,
- timezone: 'UTC',
- charset: 'utf8mb4',
- entities:[],
- synchronize:,
- logging:
- })
- })
复制代码 启动项目,没题目就可以连上数据库了(数据库和建库,navicat的使用就不说了),但是没有止步于此...
5、joi
Joi 是一个基于 JavaScript 的对象模式验证库,广泛用于验证 JavaScript 对象,确保它们符合特定的模式。它经常被用于 Web 应用步伐中,特殊是在使用 Node.js 构建 API 时,来验证用户输入、配置文件等。
安装joi
app.module导入
- import * as Joi from 'joi';
复制代码 创建校验
- // 校验
- const validationSchema = Joi.object({
- NODE_ENV:Joi.string().valid('development','production').default('development'),
- DB_PORT: Joi.number().default(3306),
- DB_HOST:Joi.string().ip(),
- DB_TYPE:Joi.string().valid('mysql','postgres'),
- DB_DATABASE: Joi.string().required(),
- DB_USERNAME:Joi.string().required(),
- DB_PASSWORD: Joi.string().required(),
- DB_SYNC: Joi.boolean().default(false)
- })
复制代码 配置ConfigModule
- ConfigModule.forRoot({
- // 配置全局使用
- isGlobal:true,
- // 加载文件目录,开发环境即加载.env.development配置,此属性不写,则可以获取到.env的配置信息
- envFilePath,
- // ()=>dotenv.config({path:'.env'})默认加载了.env
- load:[portConfig,()=>dotenv.config({path:'.env'})],
- // 数据校验
- validationSchema
- }),
复制代码 6、enum.config.ts
配置enum.config文件,我们可以通过ts文件,在不恻隐况下加载差别文件.
在config目录下创建enum.config.ts文件
- export enum EnumConfig{
- DB_DATABASE='DB_DATABASE',
- DB_HOST='DB_HOST',
- DB_PASSWORD='DB_PASSWORD',
- DB_PORT='DB_PORT',
- DB_SYNC='DB_SYNC',
- DB_TYPE='DB_TYPE',
- DB_USERNAME='DB_USERNAME'
- }
复制代码 在app.module引入
- import { EnumConfig } from './config/enum.config';
复制代码 配置typeormmodule
- TypeOrmModule.forRootAsync({
- imports:[ConfigModule],
- inject:[ConfigService],
- useFactory: (configService:ConfigService)=>
- ({
- type:configService.get(EnumConfig.DB_TYPE),
- host: configService.get(EnumConfig.DB_HOST),
- port:configService.get(EnumConfig.DB_PORT),
- username: configService.get(EnumConfig.DB_USERNAME),
- password: configService.get(EnumConfig.DB_PASSWORD),
- database: configService.get(EnumConfig.DB_DATABASE),
- timezone: 'UTC',
- charset: 'utf8mb4',
- entities:[],
- synchronize:configService.get(EnumConfig.DB_SYNC),
- logging:process.env.NODE_ENV === 'development'
- } as TypeOrmModuleAsyncOptions)
- })
复制代码 7、app.module完整代码和项目目录

- import { Module } from '@nestjs/common';import { AppController } from './app.controller';import { AppService } from './app.service';import portConfig from './config/port.config';import { EnumConfig } from './config/enum.config';import * as dotenv from 'dotenv';// 导入config模块import { ConfigModule, ConfigService } from '@nestjs/config';import { TypeOrmModule, TypeOrmModuleAsyncOptions } from '@nestjs/typeorm';import * as Joi from 'joi';// 判定环境const envFilePath = `.env.${process.env.NODE_ENV || `development`}`; // 校验
- const validationSchema = Joi.object({
- NODE_ENV:Joi.string().valid('development','production').default('development'),
- DB_PORT: Joi.number().default(3306),
- DB_HOST:Joi.string().ip(),
- DB_TYPE:Joi.string().valid('mysql','postgres'),
- DB_DATABASE: Joi.string().required(),
- DB_USERNAME:Joi.string().required(),
- DB_PASSWORD: Joi.string().required(),
- DB_SYNC: Joi.boolean().default(false)
- })@Module({ imports: [ ConfigModule.forRoot({
- // 配置全局使用
- isGlobal:true,
- // 加载文件目录,开发环境即加载.env.development配置,此属性不写,则可以获取到.env的配置信息
- envFilePath,
- // ()=>dotenv.config({path:'.env'})默认加载了.env
- load:[portConfig,()=>dotenv.config({path:'.env'})],
- // 数据校验
- validationSchema
- }), TypeOrmModule.forRootAsync({
- imports:[ConfigModule],
- inject:[ConfigService],
- useFactory: (configService:ConfigService)=>
- ({
- type:configService.get(EnumConfig.DB_TYPE),
- host: configService.get(EnumConfig.DB_HOST),
- port:configService.get(EnumConfig.DB_PORT),
- username: configService.get(EnumConfig.DB_USERNAME),
- password: configService.get(EnumConfig.DB_PASSWORD),
- database: configService.get(EnumConfig.DB_DATABASE),
- timezone: 'UTC',
- charset: 'utf8mb4',
- entities:[],
- synchronize:configService.get(EnumConfig.DB_SYNC),
- logging:process.env.NODE_ENV === 'development'
- } as TypeOrmModuleAsyncOptions)
- }) ], controllers: [AppController], providers: [AppService],})export class AppModule {}
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |