在 NestJS 中使用 mongoose 并利用我已经定义的模式来执行种子 mongoDB 的正确方法是什么

2024-03-17

我们将 NestJS 与 mongoose 一起使用,并希望为 mongoDB 提供种子。 想知道什么是播种数据库的正确方法,并使用已定义的数据库模式来确保播种的数据有效并得到正确维护。

在模块级别(就在模块定义之前)进行播种感觉很糟糕,最终导致线程池被破坏,因此所有后续 mongo 操作都会失败


我已经像这样使用了 Nestjs-command 库。

1.安装库:

https://www.npmjs.com/package/nestjs-command https://www.npmjs.com/package/nestjs-command

2. 然后我创建了一个命令来为我的 userService 提供种子,例如:

src/modules/user/seeds/user.seed.ts

import { Command, Positional } from 'nestjs-command';
import { Injectable } from '@nestjs/common';

import { UserService } from '../../../shared/services/user.service';

@Injectable()
export class UserSeed {
constructor(
    private readonly userService: UserService,
) { }

@Command({ command: 'create:user', describe: 'create a user', autoExit: true })
async create() {
    const user = await this.userService.create({
        firstName: 'First name',
        lastName: 'Last name',
        mobile: 999999999,
        email: '[email protected] /cdn-cgi/l/email-protection',
        password: 'foo_b@r',
    });
    console.log(user);
}
}

3. 将该种子命令添加到您的模块中。我在共享文件夹中创建了一个 SeedsModule 以便将来添加更多种子

src/shared/seeds.module.ts

import { Module } from '@nestjs/common';
import { CommandModule } from 'nestjs-command';

import { UserSeed } from '../modules/user/seeds/user.seed';
import { SharedModule } from './shared.module';

@Module({
    imports: [CommandModule, SharedModule],
    providers: [UserSeed],
    exports: [UserSeed],
})
export class SeedsModule {}

顺便说一句,我正在将 userService 导入到 SharedModule 中

4. 将 SeedsModule 添加到您的 AppModule 中

在您的 AppModule 上,通常在 src/app.module.ts 将 SeedsModule 添加到imports

Final

如果您按照 Nestjs-command 存储库中的步骤操作,您应该能够运行

npx nestjs-command create:user

这将引导一个新的应用程序并运行该命令,然后播种到您的 mongo/mongoose

希望对其他人也有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 NestJS 中使用 mongoose 并利用我已经定义的模式来执行种子 mongoDB 的正确方法是什么 的相关文章

随机推荐