Nodejs Nestjs ORM框架nestjs-typeorm的使用

Nodejs Nestjs ORM框架nestjs-typeorm的使用
NestJS 是一个用于构建高效、可扩展的 Node.js 服务器端应用程序的框架。@nestjs/typeorm 是 NestJS 的一个模块,它集成了 TypeORM(一个 ORM 库),使得在 NestJS 项目中使用数据库变得更加简单。

下面是如何在 NestJS 项目中使用 @nestjs/typeorm 的基本步骤:

1. 安装必要的依赖

首先,你需要安装 NestJS、TypeORM 和相关的数据库驱动。以 MySQL 数据库为例:

npm install @nestjs/core @nestjs/common @nestjs/typeorm typeorm mysql2

如果你使用的是其他数据库(如 PostgreSQL 或 SQLite),请替换 mysql2 为相应的数据库驱动包(例如 pgsqlite3)。

2. 配置 TypeORM

在你的 NestJS 项目中,你可以在 app.module.ts 文件中配置 TypeORM。这里是一个简单的例子:

import { Module } from '@nestjs/common';
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, // 自动同步数据库模式
    }),
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

3. 创建实体类

在 NestJS 中,你可以通过创建 TypeScript 类来定义数据库表结构。这些类被称为“实体”。例如,创建一个名为 User 的实体:

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

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

  @Column()
  name: string;

  @Column()
  email: string;
}

4. 使用 Repository 进行数据库操作

在服务中,你可以通过注入 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.findOneBy({ id });
  }

  async remove(id: number): Promise<void> {
    await this.usersRepository.delete(id);
  }
}

5. 控制器

最后,你可以创建控制器来处理 HTTP 请求,并调用服务中的方法:

import { Controller, Get, Param, Post, Body } from '@nestjs/common';
import { UsersService } from './users.service';
import { User } from './user.entity';

@Controller('users')
export class UsersController {
  constructor(private readonly usersService: UsersService) {}

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

  @Get(':id')
  findOne(@Param('id') id: string): Promise<User> {
    return this.usersService.findOne(+id);
  }

  @Post()
  create(@Body() user: User): Promise<User> {
    return this.usersService.create(user);
  }
}

以上就是使用 @nestjs/typeorm 在 NestJS 项目中集成和使用 TypeORM 的基本流程。


3 回复

当然,NestJS搭配TypeORM确实是个不错的选择!想象一下,你正在烹饪一道美味的披萨(你的应用),而TypeORM就是那个神奇的烤箱(ORM框架)。

首先,你需要安装TypeORM和相关依赖:

npm install @nestjs/typeorm typeorm mysql2 --save

接着,在你的模块中配置TypeORM:

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 ApplicationModule {}

别忘了创建你的实体类(Entity),它们就像是披萨上的配料。例如,一个用户实体:

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

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

  @Column()
  name: string;
}

现在,你可以开始享受你的“披萨”了,也就是开发你的应用!希望这个比喻能帮你更好地理解如何使用NestJS和TypeORM。


NestJS 是一个用于构建高效、可扩展的 Node.js 服务器端应用程序的框架。它采用了现代 JavaScript,并结合了 OOP(面向对象编程)、FP(函数式编程)和 FRP(函数式响应式编程)的元素。@nestjs/typeorm 是 NestJS 的一个库,用于与 TypeORM 集成,TypeORM 是一个 TypeScript ORM(对象关系映射)工具,可以让你以对象的方式操作数据库。

安装

首先,你需要安装必要的包:

npm install @nestjs/typeorm typeorm pg

这里我使用了 PostgreSQL 作为示例数据库,你可以根据你的需求选择其他数据库如 MySQL 或 SQLite。

配置

app.module.ts 中配置 TypeORM:

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',
      entities: [__dirname + '/**/*.entity{.ts,.js}'],
      synchronize: true, // 设置为 false 在生产环境中
    }),
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

这里的 entities 参数指定了所有实体类的位置。synchronize 设置为 true 时,TypeORM 会自动同步数据库模式与实体定义,但请注意这不应该在生产环境中使用,因为它可能会导致数据丢失。

创建实体

接下来创建一个实体类:

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

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

  @Column()
  firstName: string;

  @Column()
  lastName: string;
}

创建服务

创建一个服务来处理数据库操作:

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);
  }

  async remove(id: number): Promise<void> {
    await this.usersRepository.delete(id);
  }
}

以上就是一个基本的 NestJS 和 TypeORM 结合使用的例子。你可以通过调用 UsersService 来执行 CRUD 操作。

NestJS 使用 TypeORM 作为 ORM 框架,首先安装 @nestjs/typeormtypeorm。在模块中导入 TypeOrmModule 并配置数据库连接:

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 {}

创建实体类,并使用服务进行数据操作。例如,创建一个 User 实体:

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

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

  @Column()
  name: string;
}

在服务中注入 getRepository 来进行 CRUD 操作。

回到顶部