配置项 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