Closed vitluchko closed 9 months ago
SERVER SETTINGS PORT=3000 DATABASE CREDENTIALS DB_USER_NAME="root" DB_USER_PASSWORD='Clown228' DB_HOST='localhost' DB_PORT=3306 DB_NAME='todo-app'
export default (): Record => ({ dbUsername: process.env.DB_USER_NAME, dbPassword: process.env.DB_USER_PASSWORD, dbHost: process.env.DB_HOST, dbPort: parseInt(process.env.DB_PORT), dbName: process.env.DB_NAME, });
import { Module } from "@nestjs/common"; import { ConfigModule, ConfigService } from "@nestjs/config"; import { TypeOrmModule } from "@nestjs/typeorm"; @Module({ imports: [ TypeOrmModule.forRootAsync({ imports: [ConfigModule], useFactory: async (configService: ConfigService) => ({ type: 'mysql', host: configService.get('dbHost'), port: configService.get('dbPort'), username: configService.get('dbUsername'), password: configService.get('dbPassword'), database: configService.get('dbName'), entities: [ __dirname + '/../**/*.entity{.ts,.js}', ], synchronize: true, }), inject: [ConfigService], }), ] }) export class DatabaseModule { }
import { Module } from '@nestjs/common'; import { ConfigModule } from '@nestjs/config'; import { DatabaseModule } from './database/database.module'; import databaseConfig from './config/db.config'; import appConfig from './config/app.config'; import * as Joi from 'joi'; import { UserModule } from './modules/user/user.module'; import { TodoModule } from './modules/todo/todo.module'; @Module({ imports: [ ConfigModule.forRoot({ isGlobal: true, load: [ appConfig, databaseConfig, ], validationSchema: Joi.object({ DB_USER_PASSWORD: Joi.string().required(), DB_USER_NAME: Joi.string().required(), DB_HOST: Joi.string().required(), DB_NAME: Joi.string().required(), DB_PORT: Joi.number(), PORT: Joi.number(), }), }), DatabaseModule, UserModule, TodoModule, ], controllers: [], providers: [], }) export class AppModule { }
{ "name": "todo-app", "version": "0.0.1", "description": "", "author": "", "private": true, "license": "UNLICENSED", "scripts": { "build": "nest build", "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", "start": "nest start", "start:dev": "nest start --watch", "start:debug": "nest start --debug --watch", "start:prod": "node dist/main", "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix", "test": "jest", "test:watch": "jest --watch", "test:cov": "jest --coverage", "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand", "test:e2e": "jest --config ./test/jest-e2e.json" }, "dependencies": { "@nestjs/common": "^10.0.0", "@nestjs/config": "^3.1.1", "@nestjs/core": "^10.0.0", "@nestjs/platform-express": "^10.0.0", "@nestjs/typeorm": "^10.0.1", "joi": "^17.12.1", "mysql2": "^3.9.1", "reflect-metadata": "^0.1.13", "rxjs": "^7.8.1", "typeorm": "^0.3.20" }, "devDependencies": { "@nestjs/cli": "^10.0.0", "@nestjs/schematics": "^10.0.0", "@nestjs/testing": "^10.0.0", "@types/express": "^4.17.17", "@types/jest": "^29.5.2", "@types/node": "^20.3.1", "@types/supertest": "^6.0.0", "@typescript-eslint/eslint-plugin": "^6.0.0", "@typescript-eslint/parser": "^6.0.0", "eslint": "^8.42.0", "eslint-config-prettier": "^9.0.0", "eslint-plugin-prettier": "^5.0.0", "jest": "^29.5.0", "prettier": "^3.0.0", "source-map-support": "^0.5.21", "supertest": "^6.3.3", "ts-jest": "^29.1.0", "ts-loader": "^9.4.3", "ts-node": "^10.9.1", "tsconfig-paths": "^4.2.0", "typescript": "^5.1.3" }, "jest": { "moduleFileExtensions": [ "js", "json", "ts" ], "rootDir": "src", "testRegex": ".*\\.spec\\.ts$", "transform": { "^.+\\.(t|j)s$": "ts-jest" }, "collectCoverageFrom": [ "**/*.(t|j)s" ], "coverageDirectory": "../coverage", "testEnvironment": "node" } }
Fixed it with: https://docs.nestjs.com/techniques/configuration
.env
db.config.ts
database.module.ts
app.module.ts
package.json