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
  • 相关阅读:
    WF4.0 自定义CodeActivity与Bookmark<第三篇>
    WF4 常用类<第二篇>
    WF4.0 Activities<第一篇>
    WWF3常用类 <第十一篇>
    WWF3XOML方式创建和启动工作流 <第十篇>
    element-ui表格显示html格式
    tail -f 加过滤功能
    vue 遇到防盗链 img显示不出来
    python No module named 'urlparse'
    grep awk 查看nginx日志中所有访问的ip并 去重
  • 原文地址:https://www.cnblogs.com/stardust233/p/12193853.html
Copyright © 2011-2022 走看看