nestjs连接数据库的另一种方式
2023-04-18 15:57:10 时间
在开发nestjs应用时,连接数据库的逻辑很简单,主要是如何有效的区分开发换进和生产环境,前面我们有文章介绍了可以使用dotenv来解决,其本质原理是读取.env的配置文件给process.env对象的属性赋值,不能直接操作process.env的指向,只能操作其属性。在读取配置文件之前,我们先判断当前的环境变量,确定是哪种环境。
在看前面员工写的代码是又发现了一种方式,思路和dotenv实现差不多,不过这位同学没有依赖dotenv,所以特此记录,他的代码主要分为如下几步:
1、定义检查函数
import { Injectable } from '@nestjs/common';
import { env_dev } from "./env.dev"
import { env_prod } from "./env.prod"
@Injectable()
export class CheckEnv {
static init ():void{
let env = {};
if (process.env.NODE_ENV == "dev") {
console.log("当前环境为:开发环境,", process.env.NODE_ENV)
env = env_dev
}else if(process.env.NODE_ENV == "prod"){
env = env_prod
console.log("当前环境为:正式环境,", process.env.NODE_ENV)
}else{
process.env.NODE_ENV = "dev"
env = env_dev
}
process.env.dbhost = env['dbhost']
process.env.dbport = env['dbport']
process.env.dbusername = env['dbusername']
process.env.dbpassword = env['dbpassword']
process.env.dbname = env['dbname']
process.env.APIPORT = env['APIPORT'] //本项目对外开放的端口
process.env.alfKey = env['alfKey']
}
static check():void{
console.log("集群环境 检查环境变量 .......")
if (!process.env.dbhost){
console.log("缺失环境变量参数 dbhost");
process.exit(-1);
}else{
console.log("环境变量 dbhost",process.env.dbhost)
}
if (!process.env.dbport){
console.log("缺失环境变量参数 dbport");
process.exit(-1);
}else{
console.log("环境变量 dbport",process.env.dbport)
}
if (!process.env.dbusername){
console.log("缺失环境变量参数 dbusername");
process.exit(-1);
}else{
console.log("环境变量 dbusername",process.env.dbusername)
}
if (!process.env.dbpassword){
console.log("缺失环境变量参数 dbpassword");
process.exit(-1);
}else{
console.log("环境变量 dbpassword******")
}
if (!process.env.dbname){
console.log("缺失环境变量参数 dbname");
process.exit(-1);
}else{
console.log("环境变量 dbname",process.env.dbname)
}
}
}
逻辑很简单,定义了一个类,类中有两个方法,一个初始化,一个检查,初始化中判断了环境变量并未process.env的属性赋值
检查函数则是检查每一个环境变量,防止代码中疏忽的覆盖,因为process是全局变量。
2、在入口文件中执行
import {CheckEnv} from './common/env/checkEnv';
CheckEnv.init();
CheckEnv.check()
3、在根模块中直接使用process.env来获取配置。
@Module({
imports: [
ServeStaticModule.forRoot({
rootPath: join(__dirname, '..', 'public'),
}),
TypeOrmModule.forRoot({
type: 'mysql',
host: process.env.dbhost,
port: Number(process.env.dbport),
username: process.env.dbusername,
password: process.env.dbpassword,
database: process.env.dbname,
entities: [ AccountType , AlfUser, AlfUserRecord,AlfDevice, AlfUserGroup ,
Course, CourseWorker,CourseStudent,
synchronize: true,
logging: false,
}),
AuthModule,
AlfModule,
AlfUserModule,
AlfDeviceModule,
AlfUserGroupModule,
EventsModule
],
controllers: [AppController],
providers: [AppService],
})
以上便是我对代码中全局环境变量配置的理解和使用,希望对你有所帮助。
相关文章
- 直接在代码里面对list集合进行分页
- .NET Framework 4.5新特性详解
- 大数据的简要介绍
- 大数据的由来
- 高斯混合模型的自然梯度变量推理
- timing-wheel 仿Kafka实现的时间轮算法
- 使用Navicat软件连接自建数据库(Linux系统)
- 那一天,我被Redis主从架构支配的恐惧
- Redis 深入了解键的过期时间
- C#使用委托调用实现用户端等待闪屏
- 基于流计算 Oceanus 和 Elasticsearch Service 构建百亿级实时监控系统
- GRAND | 转录调控网络预测数据库
- JFreeChart API中文文档
- 临床相关突变查询数据库
- TIGER | 人类胰岛基因变化查询数据库
- 视频边缘计算网关EasyNVR在视频整体监控解决方案中的应用分析
- Apache Arrow - 大数据在数据湖后的下一个风向标
- 常见的电商数据指标体系
- AKShare-艺人数据-艺人流量价值
- MySQL中多表联合查询与子查询的这些区别,你可能不知道!