[{"data":1,"prerenderedAt":216},["ShallowReactive",2],{"content:\u002Fposts\u002F2025\u002Fnest-config":3,"surround:\u002Fposts\u002F2025\u002Fnest-config":204},{"id":4,"title":5,"body":6,"canonical":180,"categories":181,"date":183,"description":184,"draft":185,"extension":186,"image":187,"meta":188,"navigation":189,"path":190,"permalink":180,"readingTime":191,"recommend":180,"references":180,"seo":196,"sitemap":197,"stem":198,"tags":199,"type":180,"updated":183,"__hash__":203},"content\u002Fposts\u002F2025\u002Fnest-config.md","nest-config 模块的人体工学适配",{"type":7,"value":8,"toc":167},"minimark",[9,18,23,26,36,43,49,92,100,106,114,120,126,129,135,148,154,161,164],[10,11,12,13,17],"p",{},"nestjs-config 提供了 ",[14,15,16],"code",{"code":16},"registerAs","方法，我们可以利用它实现在使用时有类型和 key 的提示",[19,20,22],"h2",{"id":21},"创建一个-config-模块","创建一个 config 模块",[10,24,25],{},"以后我们就使用它了",[27,28,34],"pre",{"className":29,"code":31,"language":32,"meta":33},[30],"language-shell","nest g res config\n","shell","",[14,35,31],{"__ignoreMap":33},[19,37,39,40],{"id":38},"创建一个配置文件夹-srcconfigdata","创建一个配置文件夹 ",[14,41,42],{"code":42},"src\u002Fconfig\u002Fdata",[10,44,45,46,48],{},"这里放置我们所有的配置文件，每个文件都是一个 ",[14,47,16],{"code":16}," 方法\n我这里用几个简单的文件示例",[50,51,53,65,74,83],"tab",{":tabs":52},"[\"index.ts\", \"app.config.ts\",\"database.config.ts\",\"jwt.config.ts\"]",[54,55,56],"template",{"v-slot:tab1":33},[27,57,63],{"className":58,"code":60,"filename":61,"language":62,"meta":33},[59],"language-ts","import appConfig from '.\u002Fapp.config';\nimport databaseConfig from '.\u002Fdatabase.config';\nimport jwtConfig from '.\u002Fjwt.config';\n\nexport default [\n    appConfig,\n    databaseConfig,\n    jwtConfig,\n];\n","index.ts","ts",[14,64,60],{"__ignoreMap":33},[54,66,67],{"v-slot:tab2":33},[27,68,72],{"className":69,"code":70,"filename":71,"language":62,"meta":33},[59],"import { registerAs } from '@nestjs\u002Fconfig';\n\nexport default registerAs('app', () => ({\n    name: 'nest-starter',\n    isDEV: process.env.NODE_ENV === 'development',\n}));\n","app.config.ts",[14,73,70],{"__ignoreMap":33},[54,75,76],{"v-slot:tab3":33},[27,77,81],{"className":78,"code":79,"filename":80,"language":62,"meta":33},[59],"import { registerAs } from '@nestjs\u002Fconfig';\n\nexport default registerAs('database', () => ({\n    MONGO_URL: process.env.MONGO_URI,\n    DATABASE_URL: process.env.DATABASE_URL,\n}));\n","database.config.ts",[14,82,79],{"__ignoreMap":33},[54,84,85],{"v-slot:tab4":33},[27,86,90],{"className":87,"code":88,"filename":89,"language":62,"meta":33},[59],"import 'dotenv\u002Fconfig';\nimport { registerAs } from '@nestjs\u002Fconfig';\nimport { JwtSignOptions } from '@nestjs\u002Fjwt';\n\nconst secret = process.env.JWT_SECRET;\n\nif (!secret) {\n    throw new Error('JWT_SECRET environment variable is required');\n}\n\nexport default registerAs('jwt', () => ({\n    secret,\n    accessTokenOptions: {\n        expiresIn: '30m',\n        secret,\n    } as JwtSignOptions,\n    refreshTokenOptions: {\n        expiresIn: '7d',\n        secret,\n    } as JwtSignOptions,\n}));\n","jwt.config.ts",[14,91,88],{"__ignoreMap":33},[19,93,95,96,99],{"id":94},"改变-configmodulets-文件","改变 ",[14,97,98],{"code":98},"config.module.ts"," 文件",[27,101,104],{"className":102,"code":103,"filename":98,"language":62,"meta":33},[59],"import { Global, Module } from '@nestjs\u002Fcommon';\nimport { ConfigModule as NestConfigModule } from '@nestjs\u002Fconfig';\n\nimport { ConfigService } from '.\u002Fconfig.service';\nimport config from '.\u002Fdata';\n\n@Global()\n@Module({\n    imports: [\n        NestConfigModule.forRoot({\n            isGlobal: true,\n            load: [...config],\n        }),\n    ],\n    providers: [ConfigService],\n    exports: [ConfigService],\n})\nexport class ConfigModule {}\n",[14,105,103],{"__ignoreMap":33},[19,107,109,110,113],{"id":108},"在-configservicets-中引入","在 ",[14,111,112],{"code":112},"config.service.ts"," 中引入",[115,116,117],"alert",{},[10,118,119],{},"这里记得在每次创建配置文件后引入一次",[27,121,124],{"className":122,"code":123,"filename":112,"language":62,"meta":33},[59],"import { Global, Inject, Injectable } from '@nestjs\u002Fcommon';\nimport { ConfigType } from '@nestjs\u002Fconfig';\n\nimport appConfig from '.\u002Fdata\u002Fapp.config';\nimport cacheConfig from '.\u002Fdata\u002Fcache.config';\nimport databaseConfig from '.\u002Fdata\u002Fdatabase.config';\nimport jwtConfig from '.\u002Fdata\u002Fjwt.config';\nimport logConfig from '.\u002Fdata\u002Flog.config';\nimport mailerConfig from '.\u002Fdata\u002Fmailer.config';\nimport ossConfig from '.\u002Fdata\u002Foss.config';\nimport uploadConfig from '.\u002Fdata\u002Fupload.config';\n\n@Global()\n@Injectable()\nexport class ConfigService {\n    constructor(\n        @Inject(appConfig.KEY)\n        public readonly app: ConfigType\u003Ctypeof appConfig>,\n        @Inject(uploadConfig.KEY)\n        public readonly upload: ConfigType\u003Ctypeof uploadConfig>,\n        @Inject(databaseConfig.KEY)\n        public readonly database: ConfigType\u003Ctypeof databaseConfig>,\n        @Inject(jwtConfig.KEY)\n        public readonly jwt: ConfigType\u003Ctypeof jwtConfig>,\n        @Inject(logConfig.KEY)\n        public readonly log: ConfigType\u003Ctypeof logConfig>,\n        @Inject(cacheConfig.KEY)\n        public readonly cache: ConfigType\u003Ctypeof cacheConfig>,\n        @Inject(mailerConfig.KEY)\n        public readonly mailer: ConfigType\u003Ctypeof mailerConfig>,\n        @Inject(ossConfig.KEY)\n        public readonly oss: ConfigType\u003Ctypeof ossConfig>,\n    ) {}\n}\n",[14,125,123],{"__ignoreMap":33},[19,127,128],{"id":128},"使用",[10,130,131,132],{},"在使用时我们需要将配置模块注入 ",[14,133,134],{"code":134},"private readonly config: ConfigService",[10,136,137,138,140,141,144,145],{},"这时我们就可以根据之前 ",[14,139,112],{"code":112}," 文件配置的变量来使用了，就像这里的 ",[14,142,143],{"code":143},"jwtConfig"," 我们的变量名称为 ",[14,146,147],{"code":147},"jwt",[27,149,152],{"className":150,"code":151,"language":62,"meta":33},[59],"@Inject(jwtConfig.KEY)\n    public readonly jwt: ConfigType\u003Ctypeof jwtConfig>,\n",[14,153,151],{"__ignoreMap":33},[10,155,156,157,160],{},"我们就可以使用 ",[14,158,159],{"code":159},"this.config.jwt.xx","来使用了，这个 xx 会有类型提示和校验，可以很好的帮助我们获取系统的配置。并且可以极大程度的避免因为写错单词导致的问题！",[19,162,163],{"id":163},"清理代码",[10,165,166],{},"使用命令创建的 captcha 模块会有 entity、controller 和 dto，这里我们用不到可以将其删除。",{"title":33,"searchDepth":168,"depth":168,"links":169},4,[170,172,174,176,178,179],{"id":21,"depth":171,"text":22},2,{"id":38,"depth":171,"text":173},"创建一个配置文件夹 src\u002Fconfig\u002Fdata",{"id":94,"depth":171,"text":175},"改变 config.module.ts 文件",{"id":108,"depth":171,"text":177},"在 config.service.ts 中引入",{"id":128,"depth":171,"text":128},{"id":163,"depth":171,"text":163},null,[182],"代码","2025-08-11 00:07:11","nestjs 官方的 nest-config 模块已经很好用了，但是我们有更好用的方法！",false,"md","https:\u002F\u002Fbitmc.uno\u002Fpicgo\u002Fnest-config.jpg",{},true,"\u002Fposts\u002F2025\u002Fnest-config",{"text":192,"minutes":193,"time":194,"words":195},"3 min read",2.615,156900,523,{"title":5,"description":184},{"loc":190},"posts\u002F2025\u002Fnest-config",[200,201,202],"nest","nest-config","人体工学","ye7DmH5s_e-dIum-0ZH5b7nDQEPk7paVB2nmOTm2Q_U",[205,210],{"title":206,"path":207,"stem":208,"date":209,"type":180,"children":-1},"在 Nestjs 中使用验证码","\u002Fposts\u002F2025\u002Fnest-captcha","posts\u002F2025\u002Fnest-captcha","2025-08-10 22:53:48",{"title":211,"path":212,"stem":213,"date":214,"type":215,"children":-1},"广武明长城半日游","\u002Fposts\u002F2025\u002Ftravel-guangwu-changcheng","posts\u002F2025\u002Ftravel-guangwu-changcheng","2025-08-11 00:52:34","story",1789642588819]