Nodejs Nestjs ORM框架TypeORM插件@nestjs/typeorm的使用

Nodejs Nestjs ORM框架TypeORM插件@nestjs/typeorm的使用
[@nestjs](/user/nestjs)/typeorm 是 NestJS 提供的一个用于简化 TypeORM 使用的库。下面我将详细介绍如何在 NestJS 项目中使用 [@nestjs](/user/nestjs)/typeorm 插件。

1. 安装必要的依赖

首先,你需要安装 [@nestjs](/user/nestjs)/typeormtypeorm

npm install [@nestjs](/user/nestjs)/typeorm typeorm

你还需要一个数据库驱动,例如 PostgreSQL 或 MySQL。这里以 PostgreSQL 为例:

npm install pg

2. 配置模块

接下来,在你的 NestJS 应用程序中配置 TypeOrmModule。假设你使用的是 PostgreSQL 数据库,你可以这样配置:

// app.module.ts
import { Module } from '[@nestjs](/user/nestjs)/common';
import { TypeOrmModule } from '[@nestjs](/user/nestjs)/typeorm';

@Module({
  imports: [
    TypeOrmModule.forRoot({
      type: 'postgres',
      host: 'localhost',
      port: 5432,
      username: 'your_username',
      password: 'your_password',
      database: 'your_database_name',
      entities: [__dirname + '/**/*.entity{.ts,.js}'],
      synchronize: true, // 生产环境建议设置为 false
    }),
    // 其他模块
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

3. 创建实体

接着,创建一个实体类。假设我们有一个 User 实体:

// user.entity.ts
import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';

@Entity()
export class User {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  name: string;

  @Column()
  email: string;
}

4. 注册仓库

然后,创建一个仓库(Repository)来管理你的实体:

// user.repository.ts
import { Injectable } from '[@nestjs](/user/nestjs)/common';
import { InjectRepository } from '[@nestjs](/user/nestjs)/typeorm';
import { Repository } from 'typeorm';
import { User } from './user.entity';

@Injectable()
export class UserRepository {
  constructor(
    @InjectRepository(User)
    private userRepository: Repository<User>,
  ) {}

  async findAll(): Promise<User[]> {
    return this.userRepository.find();
  }

  async create(user: Partial<User>): Promise<User> {
    const newUser = this.userRepository.create(user);
    return this.userRepository.save(newUser);
  }
}

5. 使用服务和控制器

最后,在服务和服务控制器中使用仓库:

// user.service.ts
import { Injectable } from '[@nestjs](/user/nestjs)/common';
import { InjectRepository } from '[@nestjs](/user/nestjs)/typeorm';
import { UserRepository } from './user.repository';
import { User } from './user.entity';

@Injectable()
export class UserService {
  constructor(private readonly userRepository: UserRepository) {}

  async getUsers(): Promise<User[]> {
    return this.userRepository.findAll();
  }

  async createUser(user: Partial<User>): Promise<User> {
    return this.userRepository.create(user);
  }
}
// user.controller.ts
import { Controller, Get, Post, Body } from '[@nestjs](/user/nestjs)/common';
import { UserService } from './user.service';
import { User } from './user.entity';

@Controller('users')
export class UserController {
  constructor(private readonly userService: UserService) {}

  @Get()
  async getUsers(): Promise<User[]> {
    return this.userService.getUsers();
  }

  @Post()
  async createUser(@Body() user: Partial<User>): Promise<User> {
    return this.userService.createUser(user);
  }
}

通过以上步骤,你就可以在 NestJS 应用程序中使用 [@nestjs](/user/nestjs)/typeorm 来操作数据库了。


3 回复

当然,没问题!想象一下,你在烹饪一道美味的大餐,而TypeORM就是你的超级厨具。在NestJS的世界里,@nestjs/typeorm插件就像是给你的厨具套上了一层魔法手套,让你的操作更加顺滑。

首先,你需要在你的项目中安装它:

npm install @nestjs/typeorm typeorm

然后,在你的模块文件(比如app.module.ts)中,像这样配置它:

import { TypeOrmModule } from '@nestjs/typeorm';

@Module({
  imports: [
    TypeOrmModule.forRoot({
      type: 'mysql', // 或者其他你喜欢的数据库类型
      host: 'localhost',
      port: 3306,
      username: 'test',
      password: 'test',
      database: 'test',
      entities: [__dirname + '/**/*.entity{.ts,.js}'],
      synchronize: true, // 开发时可以开启,生产环境请关闭
    }),
  ],
})
export class AppModule {}

接下来,你可以创建实体类(Entity),就像准备食材一样:

import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';

@Entity()
export class User {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  name: string;
}

最后,在你的服务(Service)中注入Repository,就可以开始操作数据库了:

import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { User } from './user.entity';

@Injectable()
export class UsersService {
  constructor(
    @InjectRepository(User)
    private usersRepository: Repository<User>,
  ) {}

  findAll(): Promise<User[]> {
    return this.usersRepository.find();
  }

  findOne(id: number): Promise<User> {
    return this.usersRepository.findOne(id);
  }
}

现在,你可以开始享受用TypeORM这把魔法厨刀烹饪的乐趣了!


@nestjs/typeorm 是 NestJS 提供的一个用于简化与 TypeORM 集成的插件。下面是如何在 NestJS 项目中使用 @nestjs/typeorm 插件的基本步骤和示例代码。

安装必要的依赖

首先,你需要安装 @nestjs/typeormtypeorm,以及你的数据库驱动(例如 PostgreSQL 的 pg):

npm install @nestjs/typeorm typeorm pg

或者如果你使用的是 mysql 或其他数据库:

npm install @nestjs/typeorm typeorm mysql2

配置 TypeORM

在你的 NestJS 项目的 app.module.ts 中配置 TypeORMModule。这里以 PostgreSQL 为例:

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';

@Module({
  imports: [
    TypeOrmModule.forRoot({
      type: 'postgres', // 数据库类型
      host: 'localhost', // 数据库主机
      port: 5432, // 数据库端口
      username: 'your_username', // 数据库用户名
      password: 'your_password', // 数据库密码
      database: 'your_database', // 数据库名
      autoLoadEntities: true, // 自动加载实体
      synchronize: true, // 自动同步实体到数据库
    }),
  ],
})
export class AppModule {}

创建实体

接下来,创建一个实体来映射到数据库表。例如,我们创建一个用户实体:

import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';

@Entity()
export class User {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  name: string;

  @Column()
  email: string;
}

创建模块和仓库

然后,在一个特定的模块中导入 TypeOrmModule.forFeature([User]) 并创建一个服务或控制器来操作这个实体:

import { Controller, Get } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { User } from './user.entity'; // 假设用户实体在这个路径下

@Controller('users')
export class UsersController {
  constructor(
    @InjectRepository(User)
    private usersRepository: Repository<User>,
  ) {}

  @Get()
  async findAll(): Promise<User[]> {
    return this.usersRepository.find();
  }
}

使用实体

最后,确保在需要使用该实体的地方正确地注入它,并调用相应的方法。上面的例子展示了如何在控制器中注入 Repository 并使用它来查找所有用户。

这就是使用 @nestjs/typeorm 的基本步骤。你可以根据实际需求调整配置和代码。希望这对你有所帮助!

使用@nestjs/typeorm结合NestJS和TypeORM,首先需要安装相关依赖:

npm install @nestjs/typeorm typeorm pg

然后,在app.module.ts中配置模块:

import { TypeOrmModule } from '@nestjs/typeorm';
import { Module } from '@nestjs/common';

@Module({
  imports: [
    TypeOrmModule.forRoot({
      type: 'postgres',
      host: 'localhost',
      port: 5432,
      username: 'test',
      password: 'test',
      database: 'test',
      entities: [__dirname + '/**/*.entity{.ts,.js}'],
      synchronize: true,
    }),
  ],
})
export class AppModule {}

创建实体并注入TypeORM仓库来操作数据库。例如:

import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';
import { Injectable } from '@nestjs/common';

@Injectable()
export class UserService {
  constructor(@InjectRepository(User) private userRepository: Repository<User>) {}

  findAll(): Promise<User[]> {
    return this.userRepository.find();
  }
}

@Entity()
export class User {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  name: string;
}

以上就是基本的使用方法。

回到顶部