在 Nest.js 中使用 Sequelize 进行单表操作
2024-02-02 18:36:26
在构建基于 Node.js 的应用程序时,我们常常需要使用关系型数据库来存储和管理数据。Nest.js 是一款出色的 Node.js 框架,它提供了一系列强大的功能来构建 RESTful API 和 Web 应用程序。Sequelize 是一个流行的 ORM(对象关系映射器),它可以帮助我们轻松地将数据库与 Nest.js 应用程序连接起来。
本文将重点介绍如何在 Nest.js 中使用 Sequelize 来进行单表操作,具体来说,我们将以用户表为例,演示如何完成基本的 CRUD(创建、读取、更新、删除)操作。
前期准备
在开始之前,我们需要确保已安装 Nest.js 和 Sequelize。可以通过以下命令安装:
npm install @nestjs/core @nestjs/platform-express sequelize
配置 Sequelize
在 Nest.js 应用程序中配置 Sequelize 的步骤如下:
- 创建一个名为
ormconfig.json
的文件,并将其放在项目根目录下。 - 在
ormconfig.json
中添加以下内容:
{
"type": "postgres",
"host": "localhost",
"port": 5432,
"username": "postgres",
"password": "postgres",
"database": "nest_sequelize",
"synchronize": true
}
该配置指定了数据库类型(PostgreSQL)、主机、端口、用户名、密码和数据库名称。synchronize
属性设置为 true
,表示每次启动应用程序时都会自动同步数据库模式。
创建用户模型
接下来,我们需要创建一个模型类来表示用户表。在 src/user/user.model.ts
中创建如下文件:
import { Model, Table, Column, DataType } from 'sequelize-typescript';
@Table({
tableName: 'users',
})
export class User extends Model {
@Column({
type: DataType.INTEGER,
primaryKey: true,
autoIncrement: true,
})
id: number;
@Column({
type: DataType.STRING,
allowNull: false,
unique: true,
})
username: string;
@Column({
type: DataType.STRING,
allowNull: false,
})
password: string;
}
该模型类定义了三个属性:id
(主键)、username
(用户名)和 password
(密码)。
创建用户服务
用户服务将包含与用户表进行交互所需的逻辑。在 src/user/user.service.ts
中创建如下文件:
import { Injectable } from '@nestjs/common';
import { InjectModel } from '@nestjs/sequelize';
import { User } from './user.model';
@Injectable()
export class UserService {
constructor(
@InjectModel(User)
private userModel: typeof User,
) {}
async findAll(): Promise<User[]> {
return this.userModel.findAll();
}
async findOne(id: number): Promise<User> {
return this.userModel.findByPk(id);
}
async create(user: User): Promise<User> {
return this.userModel.create(user);
}
async update(user: User): Promise<User> {
return this.userModel.update(user, { where: { id: user.id } });
}
async delete(id: number): Promise<void> {
await this.userModel.destroy({ where: { id: id } });
}
}
该服务包含了五个方法:
findAll
:获取所有用户。findOne
:根据 ID 获取单个用户。create
:创建新用户。update
:更新现有用户。delete
:根据 ID 删除用户。
创建用户控制器
用户控制器将处理与用户表相关的 HTTP 请求。在 src/user/user.controller.ts
中创建如下文件:
import { Controller, Get, Post, Put, Delete, Param, Body } from '@nestjs/common';
import { UserService } from './user.service';
import { User } from './user.model';
@Controller('users')
export class UserController {
constructor(private userService: UserService) {}
@Get()
async findAll(): Promise<User[]> {
return this.userService.findAll();
}
@Get(':id')
async findOne(@Param('id') id: number): Promise<User> {
return this.userService.findOne(id);
}
@Post()
async create(@Body() user: User): Promise<User> {
return this.userService.create(user);
}
@Put()
async update(@Body() user: User): Promise<User> {
return this.userService.update(user);
}
@Delete(':id')
async delete(@Param('id') id: number): Promise<void> {
return this.userService.delete(id);
}
}
该控制器包含五个端点:
GET /users
:获取所有用户。GET /users/:id
:根据 ID 获取单个用户。POST /users
:创建新用户。PUT /users
:更新现有用户。DELETE /users/:id
:根据 ID 删除用户。
测试应用程序
完成所有配置和编码后,我们可以通过以下命令启动应用程序:
npm start
然后,我们可以使用 Postman 或类似工具来测试应用程序。
结论
本文演示了如何在 Nest.js 中使用 Sequelize 进行单表操作。我们创建了一个用户模型、用户服务和用户控制器,并完成了基本的 CRUD 操作。这些操作为我们在 Nest.js 应用程序中管理数据库数据提供了基础。
除了本文中介绍的内容,还可以探索 Sequelize 的其他功能,例如关联、事务和查询构建器。通过有效利用 Sequelize 的强大功能,我们可以轻松构建健壮且高效的数据库操作。