在Nest JS的MongoDB中默认插入用户(仅当应用启动时)

x3naxklr  于 2023-01-25  发布在  Go
关注(0)|答案(1)|浏览(138)

我正在将项目从expressjs更改为nestjs。
在express中,我在app.ts中默认向数据库添加了一个admin用户。
像这样:

public async addDefaultAdmin() {
    UserModel.find({ role: Roles.admin }).then(async (superAdmin) => {
      if (superAdmin.length === 0) {
        try {
          const newUser = new UserModel({...});
          await this.hashPassWord(newUser);
          await newUser.save();
          console.log("default admin successfully added.");
        } catch (error: any) {
          console.log(error);
        }
      }
    });
  }

我想知道我如何在NestJS中做到这一点?NestJS或typeOrm有这个问题的解决方案吗?

k3bvogb1

k3bvogb11#

您可能需要使用生命周期事件。NestJS在应用程序启动和关闭期间触发事件。
根据文档,onApplicationBootstrap()事件可能对您的情况有所帮助。
在所有模块初始化后但在侦听连接之前调用。
但是,NestJS在应用程序开始侦听之后不会公开钩子,因此在这种情况下,您需要在服务器可以侦听端口之后立即运行bootstrap函数内部的自定义函数。
伪代码如下所示:

// main.ts
import { User } from '/path/to/user.entity';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  ...
  await app.listen(3000);
  let user = app.get(getRepositoryToken(User)); // You need to pass the entity file to typeorm
  await addDefaultAdmin(user); // Pass the user model, and call the function
}

bootstrap();

相关问题