在 Nest.js 中使用 MongoDB 與 TypeORM


在 Nest.js 中使用 MongoDB 與 TypeORM

首先要在 database 文件夾里建立DatabaseModule模塊文件,

// database/database.module.ts
import { Module } from '@nestjs/common';
import { databaseProviders } from './database.providers';

@Module({
  providers: [...databaseProviders],
  exports: [...databaseProviders],
})
export class DatabaseModule {}

還有databaseProviders,要注意根據情況配置好端口、數據庫名等等信息,

// database/database.providers.ts
import { createConnection } from 'typeorm';

export const databaseProviders = [
  {
    // Token可以自己設定
    provide: 'DbConnectionToken',
    useFactory: async () =>
      await createConnection({
        type: 'mongodb',
        host: 'localhost',
        port: 27017,
        database: 'test',
        entities: [__dirname + '/../**/*.entity{.ts,.js}'],
      }),
  },
];

然后在一個需要用到 MongoDB 的模塊里導入DatabaseModule,我這里用的是LoginModule,

// login/login.module.ts
import { Module } from '@nestjs/common';
import { DatabaseModule } from '../database/database.module';
import { loginProviders } from './login.providers';
import { LoginService } from './login.service';
import { LoginController } from './login.controller';

@Module({
  imports: [DatabaseModule], // 這里導入進來
  controllers: [LoginController],
  providers: [...loginProviders, LoginService],
})
export class LoginModule {}

定義好你的數據實體,

// login/login.entity.ts
import { Entity, Column, ObjectID, ObjectIdColumn } from 'typeorm';

@Entity()
export class User {
  @ObjectIdColumn() id: ObjectID;
  @Column() username: string;
  @Column() password: string;
}

在loginProviders里注入,

// login/login.providers.ts
import { Connection, getMongoRepository } from 'typeorm';
import { User } from './login.entity';

export const loginProviders = [
  {
    // Token可以自己設定
    provide: 'LoginRepositoryToken',
    // User是entity定義的數據實體
    useFactory: (connection: Connection) => connection.getMongoRepository(User),
    inject: ['DbConnectionToken'],
  },
];

在LoginService里面引入,

import { Injectable, Inject } from '@nestjs/common';
import { MongoRepository } from 'typeorm';
import { User } from './login.entity';

@Injectable()
export class LoginService {
  constructor(
    // Token要對應
    @Inject('LoginRepositoryToken')
    private readonly loginRepository: MongoRepository<User>,
  ) {}
  // 數據庫的操作交給service來提供
  async findAll(): Promise<User[]> {
    return await this.loginRepository.find();
  }
}

最后就可以在LoginController里面使用了!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM