返回

NestJs 入门之二:MySQL 集成与框架优化

前端

前言

在上一篇文章中,我们使用 MongoDB 作为 NestJs 项目的数据库。然而,考虑到许多企业仍然使用 MySQL 作为其主要数据库,因此在本篇文章中,我们将把数据库切换为 MySQL,并对框架结构和 CRUD 功能进行优化。这些优化将使 NestJs 应用程序更加健壮、可扩展且易于维护。

MySQL 集成

为了将 MySQL 集成到 NestJs 项目中,我们需要安装必要的软件包。我们可以使用以下命令来安装 MySQL 软件包:

npm install mysql2

安装完成后,我们需要在 NestJs 模块中导入 MySQL 软件包。我们可以通过在 app.module.ts 文件中添加以下代码来实现:

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

@Module({
  imports: [
    TypeOrmModule.forRoot({
      type: 'mysql',
      host: 'localhost',
      port: 3306,
      username: 'root',
      password: 'password',
      database: 'nest_db',
      entities: [],
      synchronize: true,
    }),
  ],
})
export class AppModule {}

在上面的代码中,我们使用了 TypeOrm 软件包来连接到 MySQL 数据库。TypeOrm 是一个流行的 ORM(对象关系映射)框架,它可以帮助我们轻松地将数据库中的数据映射到我们的 TypeScript 类中。

框架优化

在集成 MySQL 数据库后,我们还需要对 NestJs 项目的框架结构进行一些优化。这些优化将使我们的应用程序更加易于维护和扩展。

1. 使用模块化设计

模块化设计是 NestJs 的一项重要特性。它可以帮助我们将应用程序分解成更小的、独立的模块。这使得我们的应用程序更加易于维护和扩展。

为了使用模块化设计,我们需要在 NestJs 项目中创建模块。我们可以通过在项目根目录下运行以下命令来创建模块:

nest g module user

这将创建一个名为 user 的模块。该模块将包含与用户相关的所有控制器、服务和实体。

2. 使用服务层

服务层是 NestJs 中另一个重要的概念。服务层是负责处理业务逻辑的层。它可以帮助我们将业务逻辑与控制器和实体分离。这使得我们的应用程序更加易于测试和维护。

为了使用服务层,我们需要在 NestJs 项目中创建服务。我们可以通过在项目根目录下运行以下命令来创建服务:

nest g service user

这将创建一个名为 user 的服务。该服务将包含与用户相关的所有业务逻辑。

3. 使用依赖注入

依赖注入是 NestJs 中的一项强大功能。它可以帮助我们轻松地将服务注入到控制器和实体中。这使得我们的应用程序更加易于编写和维护。

为了使用依赖注入,我们需要在 NestJs 项目中使用 @Inject 装饰器。我们可以通过在控制器或实体的构造函数中添加 @Inject 装饰器来实现。例如:

import { Controller, Get, Inject } from '@nestjs/common';
import { UserService } from './user.service';

@Controller('user')
export class UserController {
  constructor(@Inject(UserService) private userService: UserService) {}

  @Get()
  findAll() {
    return this.userService.findAll();
  }
}

在上面的代码中,我们使用了 @Inject 装饰器将 UserService 注入到 UserController 中。这使得我们可以轻松地使用 UserService 中的方法。

CRUD 功能优化

在优化了 NestJs 项目的框架结构后,我们还需要对 CRUD(创建、读取、更新、删除)功能进行优化。这些优化将使我们的应用程序更加高效和健壮。

1. 使用分页

分页是提高应用程序性能的一种有效方法。分页是指将数据分成更小的块,然后逐个块地加载。这可以减少服务器的负载,并提高应用程序的响应速度。

为了在 NestJs 项目中使用分页,我们可以使用 TypeOrm 的分页功能。我们可以通过在实体的 @Entity 装饰器中添加 skip 和 take 属性来实现。例如:

import { Entity, Column, Skip, Take } from '@nestjs/typeorm';

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

  @Column()
  name: string;

  @Skip()
  password: string;

  @Take()
  limit: number;
}

在上面的代码中,我们使用 skip 和 take 属性来指定要跳过的记录数和要获取的记录数。

2. 使用缓存

缓存是提高应用程序性能的另一种有效方法。缓存是指将数据存储在临时内存中,以便以后快速访问。这可以减少对数据库的访问次数,并提高应用程序的响应速度。

为了在 NestJs 项目中使用缓存,我们可以使用 NestJs 的缓存模块。我们可以通过在 app.module.ts 文件中添加以下代码来安装缓存模块:

import { Module } from '@nestjs/common';
import { CacheModule } from '@nestjs/cache';

@Module({
  imports: [
    CacheModule.register(),
  ],
})
export class AppModule {}

在安装了缓存模块后,我们就可以在 NestJs 项目中使用缓存了。我们可以通过使用 @CacheKey 装饰器来缓存数据。例如:

import { Controller, Get, CacheKey } from '@nestjs/common';
import { UserService } from './user.service';

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

  @Get()
  @CacheKey('all-users')
  findAll() {
    return this.userService.findAll();
  }
}

在上面的代码中,我们使用了 @CacheKey 装饰器来缓存 findAll() 方法的结果。这使得 findAll() 方法在下次被调用时可以直接从缓存中获取结果,从而提高了应用程序的响应速度。

总结

在本文中,我们介绍了如何在 NestJs 项目中集成 MySQL 数据库,并对框架结构和 CRUD 功能进行了优化。这些优化将使我们的应用程序更加健壮、可扩展且易于维护。