新手指南:从零开始用 Nest 搞定 MySQL 数据库
2023-06-12 08:51:22
在 Nest 框架中建立 MySQL 连接:打造无缝的数据管理系统
在现代 Web 开发中,数据管理是至关重要的。通过与数据库无缝交互,应用程序可以存储、检索和操作用户数据。Nest 框架 作为一款现代、高效的 Node.js 框架,简化了与 MySQL 数据库的连接过程。
一、准备工作
要使用 MySQL 数据库,你需要:
- 安装 Node.js v14 或更高版本。
- 安装 Nest CLI:
npm install -g @nestjs/cli
。 - 创建一个新的 Nest 项目:
nest new my-nest-project
。
二、引入 MySQL 依赖
安装 MySQL 驱动:npm install mysql2
。
三、配置数据库连接
在 src/database/database.module.ts
中添加以下代码:
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { ConfigModule } from '@nestjs/config';
@Module({
imports: [
TypeOrmModule.forRootAsync({
imports: [ConfigModule],
useFactory: () => ({
type: 'mysql',
host: process.env.DB_HOST,
port: parseInt(process.env.DB_PORT),
username: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
entities: [],
synchronize: true,
}),
}),
],
})
export class DatabaseModule {}
四、创建实体
实体代表数据库中的表。在 src/entities
中创建一个文件(如 user.entity.ts
)并定义一个实体类:
import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@Column()
email: string;
}
五、添加仓库
仓库提供对数据库的访问。在 src/repositories
中创建一个文件(如 user.repository.ts
)并定义一个仓库类:
import { Repository } from 'typeorm';
import { User } from '../entities/user.entity';
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
@Injectable()
export class UserRepository {
constructor(
@InjectRepository(User)
private userRepository: Repository<User>,
) {}
async findAll(): Promise<User[]> {
return await this.userRepository.find();
}
// 其他 CRUD 方法...
}
六、创建控制器
控制器处理来自客户端的请求。在 src/controllers
中创建一个文件(如 user.controller.ts
)并定义一个控制器类:
import { Controller, Get, Post, Put, Delete, Body, Param } from '@nestjs/common';
import { UserService } from '../services/user.service';
@Controller('users')
export class UserController {
constructor(private userService: UserService) {}
async findAll(): Promise<User[]> {
return await this.userService.findAll();
}
// 其他 CRUD 方法...
}
七、创建服务
服务充当控制器和仓库之间的桥梁。在 src/services
中创建一个文件(如 user.service.ts
)并定义一个服务类:
import { Injectable } from '@nestjs/common';
import { UserRepository } from '../repositories/user.repository';
@Injectable()
export class UserService {
constructor(private userRepository: UserRepository) {}
async findAll(): Promise<User[]> {
return await this.userRepository.findAll();
}
// 其他 CRUD 方法...
}
八、运行项目
启动项目:npm start
。
九、测试项目
通过以下方式测试项目:
- 访问
http://localhost:3000/users
获取用户列表。 - 访问
http://localhost:3000/users/1
获取特定用户。 - 使用 POST 请求创建用户。
- 使用 PUT 请求更新用户。
- 使用 DELETE 请求删除用户。
常见问题解答
Q1:为什么我连接不到数据库?
A1:确保数据库配置信息正确,并且 MySQL 正在运行。
Q2:我无法找到一个实体或仓库类?
A2:确保已正确创建并导入相关文件。
Q3:我无法通过控制器访问服务?
A3:确保已正确注入服务并在控制器中使用它。
Q4:如何使用事务处理数据库操作?
A4:使用 TypeORM 的 TransactionManager 或 TransactionRepository。
Q5:我如何防止 SQL 注入攻击?
A5:使用 TypeORM 的 escape 或 sanitize 方法,并避免拼接查询字符串。
结论
通过将 Nest 框架与 MySQL 数据库连接起来,你可以轻松地管理用户数据,构建健壮、可扩展的 Web 应用程序。遵循本指南中的步骤,即可快速轻松地实现数据库集成。保持联系,了解更多关于 Nest 框架和 MySQL 的技巧和窍门,提升你的 Web 开发技能!