Skip to content

配置项 env 推荐

  • 就是把那些数据库配置、端口配置、日志配置、缓存配置、文件上传配置、邮件配置、第三方配置等,这些配置项,统一放到一个文件中,方便管理。

安装

bash

pnpm i @nestjs/config -S
pnpm i cross-env -S
pnpm i dotenv -S

根目录

在根目录,不在 src 目录下

  • 创建.env文件
bash
DATABASE_USER=root
DATABASE_PASSWORD=123456
DATABASE_NAME=testnest1
DATABASE_HOST=localhost
DATABASE_PORT=3306
DATA="EVN或者PRO没用的配置"
  • 创建.env.development
bash

DATABASE_USER=root
DATABASE_PASSWORD=123456
DATABASE_NAME=testnest1
DATABASE_HOST=localhost
DATABASE_PORT=3306
DATA="测试服"
  • 创建.env.production
bash

DATABASE_USER=root
DATABASE_PASSWORD=123456
DATABASE_NAME=testnest1
DATABASE_HOST=localhost
DATABASE_PORT=3306
DATA="正式服"

找到 package.json 文件

bash
"start:dev": "cross-env NODE_ENV=development nest start --watch",
"start:debug": "nest start --debug --watch",
"start:prod": "cross-env NODE_ENV=production node dist/main",

找到 nest-cli.json

  • 修改如下
bash

{
  "$schema": "https://json.schemastore.org/nest-cli",
  "collection": "@nestjs/schematics",
  "sourceRoot": "src",
  "compilerOptions": {
    "deleteOutDir": true
  },
   "generateOptions": {
    "spec": false
  }
}

找到 app.module.ts

ts
import { Module } from "@nestjs/common";
import { LoginModule } from "./Login/login.module";
import { UserModule } from "./User/user.module";

// 配置文件
import { ConfigModule } from "@nestjs/config";
import * as dotenv from "dotenv";
const envPath = `.env.${process.env.NODE_ENV || "development"}`;

@Module({
  imports: [
    UserModule,
    LoginModule,
    // 修改配置
    ConfigModule.forRoot({
      isGlobal: true,
      envFilePath: envPath,
      // 这里新增.env的文件解析
      load: [() => dotenv.config({ path: ".env" })],
    }),
  ],
  controllers: [],
  providers: [],
})
export class AppModule {}

使用

ts
import { Inject, Injectable } from "@nestjs/common";
import { ConfigService } from "@nestjs/config";
@Injectable()
export class LoginService {
  constructor() {}
  @Inject()
  private ConfigService: ConfigService;

  async login(): Promise<string> {
    return this.ConfigService.get("APP_ENV");
  }
}

main.js

ts
import { NestFactory } from "@nestjs/core";
import { AppModule } from "./app.module";

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  // 设置跨域
  app.enableCors({
    origin: process.env.CORS_ORIGIN || "*", // 生产环境应指定具体的域名
    methods: process.env.CORS_METHODS || "GET,HEAD,PUT,PATCH,POST,DELETE",
    allowedHeaders: process.env.CORS_HEADERS || "Content-Type, Accept",
    credentials: process.env.CORS_CREDENTIALS === "true", // 请确保实际字符串值是'true'或者'false'
  });

  await app.listen(process.env.PORT ?? 5000);
}
bootstrap();

env 总结

bash

# 开发环境配置

## 跨域设置

### 生产环境应指定具体的域名

CORS_ORIGIN = "http://127.0.0.1:5500"

### 跨域允许的方法

CORS_METHODS = "GET,HEAD,PUT,PATCH,DELETE,POST"

### 允许跨域的头部

CORS_HEADERS = "Origin,Accept,Authorization,X-Requested-With,Content-Type,Access-Control-Request-Method,Access-Control-Request-Headers"

### 是否允许携带凭证

CORS_CREDENTIALS = "true"

## 上传和系统文件

### 环境

APP_ENV = "development"

### 域名

APP_STATIC_DOMAIN = "http://localhost"

### 前缀

APP_PREFIX = ""

### 端口

APP_PORT = "5000"

### 日志存储地址

APP_LOG = "logs"

### 文件存储地址

APP_UPLOAD_PATH = "uploads"

### 静态文件存储地址

APP_STATIC = "public"

### 最大上传数量

APP_UPLOAD_MAX_FILE = 2

### 阿里云配置

OSS_AccessKeyId = ""

OSS_AccessKeySecret = ""

OSS_Region = "oss-cn-beijing"

OSS_Bucket = "jsopy-upload-oss"

#### 角色凭证

OSS_Arn = ""

## 数据库

### 写入数据库

DATABASE_URL = "xxx"

### 读取数据库

DATABASE_READ_URL = "xxxx"

## Redis

REDIS_HOST = "xxx"

REDIS_PORT = 6379

REDIS_PASSWORD = "xxxx"

REDIS_DB = 0

REDIS_PREFIX = "meeting:"

REDIS_TTL = 3600

## JWT

JWT_SECRETKEY = "jsopy"

JWT_EXPIRESIN = "1h"

JWT_REFRESH_EXPIRESIN = "7d"

## 权限 白名单

PERMISSION_WHITELIST = /testproject/testcors,/testproject/testconfig,/testproject/testregister/jwt

## 拦截器白名单

INTERCEPTOR_WHITELIST = /testproject/testconfig,/testproject/testregister/jwt