zoukankan      html  css  js  c++  java
  • 在 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里面使用了!

    博客已迁移到 blog.pythonking.top,如果地址失效或者有其他问题请到 github.com/DongchengWang/my-blog
  • 相关阅读:
    17. Letter Combinations of a Phone Number
    77. Combinations
    90. Subsets II
    78. Subsets
    275. H-Index II
    154. Find Minimum in Rotated Sorted Array II
    153. Find Minimum in Rotated Sorted Array
    树状数组区间查询和单点更新
    树状数组区间查询和单点更新
    最小生成树 kuangbin专题最后一个题
  • 原文地址:https://www.cnblogs.com/stardust233/p/12193853.html
Copyright © 2011-2022 走看看