[{"data":1,"prerenderedAt":168},["ShallowReactive",2],{"content:\u002Fposts\u002F2022\u002Fnest-providers":3,"surround:\u002Fposts\u002F2022\u002Fnest-providers":157},{"id":4,"title":5,"body":6,"canonical":134,"categories":135,"date":137,"description":138,"draft":139,"extension":140,"image":141,"meta":142,"navigation":143,"path":144,"permalink":134,"readingTime":145,"recommend":134,"references":134,"seo":150,"sitemap":151,"stem":152,"tags":153,"type":134,"updated":137,"__hash__":156},"content\u002Fposts\u002F2022\u002Fnest-providers.md","nest 服务提供者",{"type":7,"value":8,"toc":126},"minimark",[9,13,24,28,34,37,43,45,51,54,60,62,68,71,74,82,92,95,101,105,117,120],[10,11,12],"h2",{"id":12},"类注册",[14,15,21],"pre",{"className":16,"code":18,"language":19,"meta":20},[17],"language-ts","import { Module } from \"@nestjs\u002Fcommon\"\n\nimport { AppController } from \".\u002Fapp.controller\"\nimport { AppService } from \".\u002Fapp.service\"\nimport { MyService } from \".\u002Fmy\u002Fmy.service\"\n\n@Module({\n    imports: [],\n    controllers: [AppController],\n    providers: [AppService, MyService],\n})\nexport class AppModule {}\n","ts","",[22,23,18],"code",{"__ignoreMap":20},[25,26,27],"p",{},"使用：",[14,29,32],{"className":30,"code":31,"language":19,"meta":20},[17],"export class AppController {\n    constructor(private readonly MyService) {}\n}\n",[22,33,31],{"__ignoreMap":20},[25,35,36],{},"完整写法，可更改提供者名称",[14,38,41],{"className":39,"code":40,"language":19,"meta":20},[17],"import { Module } from \"@nestjs\u002Fcommon\"\n\nimport { AppController } from \".\u002Fapp.controller\"\nimport { AppService } from \".\u002Fapp.service\"\nimport { MyService } from \".\u002Fmy\u002Fmy.service\"\n\n@Module({\n    imports: [],\n    controllers: [AppController],\n    providers: [\n        AppService,\n        {\n            provide: \"myService\",\n            useClass: MyService,\n        },\n    ],\n})\nexport class AppModule {}\n",[22,42,40],{"__ignoreMap":20},[25,44,27],{},[14,46,49],{"className":47,"code":48,"language":19,"meta":20},[17],"export class AppController {\n    constructor(@Inject('myService') private readonly myService) {}\n}\n",[22,50,48],{"__ignoreMap":20},[10,52,53],{"id":53},"基本数据注册",[14,55,58],{"className":56,"code":57,"language":19,"meta":20},[17],"import { Module } from \"@nestjs\u002Fcommon\"\n\nimport { AppController } from \".\u002Fapp.controller\"\nimport { AppService } from \".\u002Fapp.service\"\n\n@Module({\n    imports: [],\n    controllers: [AppController],\n    providers: [\n        AppService,\n        {\n            provide: \"config\",\n            useValue: { name: \"wxw\", author: \"wxw\" },\n        },\n    ],\n})\nexport class AppModule {}\n",[22,59,57],{"__ignoreMap":20},[25,61,27],{},[14,63,66],{"className":64,"code":65,"language":19,"meta":20},[17],"export class AppController {\n    constructor(@Inject('config') private readonly config) {}\n}\n",[22,67,65],{"__ignoreMap":20},[10,69,70],{"id":70},"动态加载模块",[25,72,73],{},"实现根据不同的环境创建不同的服务，首先需要获取 env 环境变量",[14,75,80],{"className":76,"code":78,"language":79,"meta":20},[77],"language-bash","pnpm add dotenv\n","bash",[22,81,78],{"__ignoreMap":20},[25,83,84,85,88,89],{},"创建 ",[22,86,87],{"code":87},"app.service.ts"," 和 ",[22,90,91],{"code":91},"my.service.ts",[25,93,94],{},"根据不同环境变量动态设置服务",[14,96,99],{"className":97,"code":98,"language":19,"meta":20},[17],"import { Module } from \"@nestjs\u002Fcommon\"\nimport { config } from \"dotenv\"\nimport path from \"node:path\"\n\nimport { AppController } from \".\u002Fapp.controller\"\nimport { AppService } from \".\u002Fapp.service\"\nimport { MyService } from \".\u002Fmy\u002Fmy.service\"\n\nconfig({ path: path.join(__dirname, \"..\u002F.env\") })\n\nconst appService = {\n    provide: \"appService\",\n    useClass: process.env.NODE_ENV === \"development\" ? AppService : MyService,\n}\n@Module({\n    imports: [],\n    controllers: [AppController],\n    providers: [appService],\n})\nexport class AppModule {}\n",[22,100,98],{"__ignoreMap":20},[10,102,104],{"id":103},"自定义-dbmodule-接入-typegoose","自定义 DbModule 接入 typegoose",[106,107,108],"blockquote",{},[25,109,110],{},[111,112,116],"a",{"href":113,"rel":114},"https:\u002F\u002Fgithub.com\u002FWhbbit1999\u002FdbModule",[115],"nofollow","GitHub 仓库地址",[25,118,119],{},"主要代码实现",[14,121,124],{"className":122,"code":123,"language":19,"meta":20},[17],"\u002F\u002F db.module.ts\nimport { DynamicModule, Module, Provider } from '@nestjs\u002Fcommon';\nimport { ConfigService } from '@nestjs\u002Fconfig';\nimport { getModelForClass, mongoose } from '@typegoose\u002Ftypegoose';\n\nimport { DbService } from '.\u002Fdb.service';\n\ninterface ClassType { new (...args: any[]): any }\n\n@Module({})\nexport class DbModule {\n    static forRoot(envKey: string, options = {}): DynamicModule {\n        const providers: Provider[] = [\n            {\n                provide: 'DB_CONNECT',\n                inject: [ConfigService],\n                useFactory: (configService: ConfigService) => {\n                    const uri = configService.get\u003Cstring>(envKey, 'MONGO_URI');\n                    return mongoose.connect(uri, options);\n                },\n            },\n        ];\n        return {\n            module: DbModule,\n            providers,\n            exports: providers,\n            global: true,\n        };\n    }\n\n    static forFeature(models: ClassType[]): DynamicModule {\n        const providers = models.map((model) => {\n            return {\n                provide: model.name,\n                useFactory: () => getModelForClass(model),\n            } as Provider;\n        });\n        return {\n            module: DbModule,\n            providers,\n            exports: providers,\n            global: true,\n        };\n    }\n}\n",[22,125,123],{"__ignoreMap":20},{"title":20,"searchDepth":127,"depth":127,"links":128},4,[129,131,132,133],{"id":12,"depth":130,"text":12},2,{"id":53,"depth":130,"text":53},{"id":70,"depth":130,"text":70},{"id":103,"depth":130,"text":104},null,[136],"代码","2022-12-04 16:15:46","实现一些简单的 nest 服务提供者，以此了解服务提供者的作用方式。并且自定义一个 DbModule 接入 typegoose",false,"md","https:\u002F\u002Fbitmc.uno\u002Fpicgo\u002F67a2262def4a5-78.webp",{},true,"\u002Fposts\u002F2022\u002Fnest-providers",{"text":146,"minutes":147,"time":148,"words":149},"3 min read",2.185,131100,437,{"title":5,"description":138},{"loc":144},"posts\u002F2022\u002Fnest-providers",[154,155],"nest","服务端","pmV0DSE-vFIUf8kHc3clB_8TGkuIaCMgKU36zNf16tQ",[158,163],{"title":159,"path":160,"stem":161,"date":162,"type":134,"children":-1},"nest 拦截器","\u002Fposts\u002F2022\u002Fnest-exceptionfilter","posts\u002F2022\u002Fnest-ExceptionFilter","2022-12-04 16:14:54",{"title":164,"path":165,"stem":166,"date":167,"type":134,"children":-1},"使用GitHubActions部署","\u002Fposts\u002F2022\u002Fgithubactions-deploy","posts\u002F2022\u002FGitHubActions-deploy","2022-12-05 16:25:27",1789642595950]