乐闻世界logo
第 23 / 24 篇

基于NestJS 和 TypeORM 实现 CURD RESTful API接口

第 23 / 24 篇
1 零基础入门 Nestjs 开发教程2基于Nestjs实现node发送邮件3一文教会你如何使用 Vercel 部署你的 NestJS 应用 4NestJS 如何进行服务端推送SSE、自定义服务端推送内容5如何在 NestJS 中集成 MongoDB 并实现数据的增删改查操作6如何在 NestJS 中集成 Redis 并基于 Redis 实现接口访问限频率7基于 NestJS 集成 ElasticSearch 实现模糊搜索功能8如何在 NestJS 项目中优雅的使用发布订阅工具 Event Emitter9一篇文章学会使用 NestJS 的 Module 实现高效的代码模块管理10一篇文章学会如何使用 NestJS 的五种 Provider 提供者11 一篇文章学会如何使用 NestJS 的 管道Pipes 实现高效的数据转换和验证12基于 NestJS 操作 TypeORM 中的多对多 ManyToMany13基于 NestJS 操作 TypeORM 中的一对多 OneToMany14一篇文章学会如何使用 NestJS 的 Guards 守卫实现系统身份验证和授权15一篇文章学会 NestJS 中间件的使用,让你的应用更灵活和可扩展16一篇文章学会如何使用 NestJS 过滤器处理全局异常情况17一篇文章学会 NestJS 的拦截器并且附带实战操作案例18NestJS 如何实现接口多版本控制19如何在 NestJS 中安全高效的管理 Config 配置20一篇文章掌握 NestJS 所有的生命周期以及执行时机21如何在 Nest 项目中自定义装饰器22NestJS 基于 Passort 和 JWT Token 实现接口的权限管理23基于NestJS 和 TypeORM 实现 CURD RESTful API接口24探索 @nestjs/cqrs:在 NestJS 中实现命令查询责任分离模式CQRS
返回教程主页

基于NestJS 和 TypeORM 实现 CURD RESTful API接口

对于服务端项目而言,对外如何提供合格规范的HTTP接口,对内如何优雅的操作数据存储,比如mysql、mongodb。本文是NestJS服务端开发的基础入门教程,我会根据成熟的解决方案,给大家详细介绍如何基于NestJS实现开发RESTfulAPI,其中基于TypeORM操作mysql数据的增删改查。希望通过阅读完这篇文章后零基础的朋友也能够完成简单的服务端项目开发。准备工作1.安装依赖为了方便对m

前言

对于服务端项目而言,对外如何提供合格规范的HTTP接口,对内如何优雅的操作数据存储,比如mysql、mongodb。

本文是NestJS服务端开发的基础入门教程,我会根据成熟的解决方案,给大家详细介绍如何基于NestJS实现开发RESTful API,其中基于TypeORM操作mysql数据的增删改查。

希望通过阅读完这篇文章后零基础的朋友也能够完成简单的服务端项目开发。

准备工作

1. 安装依赖

为了方便对mysql进行操作,ORM工具是必不可少的。TypeORM对NestJS有良好的支持,同是对TypeScript 也有极好的支持,所以首先安装好必要的依赖包;

javascript
npm install @nestjs/typeorm typeorm mysql2

2. 导入 TypeOrmModule

在项目模块中导入TypeORM模块,并且将mysql连接信息按照下方模块正确填写;

javascript
import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; @Module({ imports: [ TypeOrmModule.forRoot({ type: 'mysql', host: 'localhost', port: 3306, username: 'username', password: 'password', database: 'databaseName', autoLoadEntities: true, synchronize: true, logging: ["query"] }), ], }) export class AppModule {}

3. 创建数据库表实体

TypeORM 的目的是开发者不需要直接面对SQL语句,只需要通过TypeORM提供的API就能够完成对数据库表数据的增删改查。

TypeORM中通过entity对象与数据库的表一一对应。例如本文我们实现对 article 数据表的各种操作。

javascript
import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm'; @Entity() export class Article { @PrimaryGeneratedColumn() id: number; @Column() title: string; @Column() content: string; @Column({ default: true }) isPublish: boolean; }

4. 加载数据库实体

步骤3定义好了article对象,接下来需要将它注册到TypeORM

javascript
import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { Article } from './models/article'; @Module({ imports: [ TypeOrmModule.forRoot({ ... }), TypeOrmModule.forFeature([Article]) ], }) export class AppModule {}

5. 项目启动

项目启动后,从控制台输出的日志可以看到article表创建的日志,说明已经成功初始化了TypeORM

Untitled.png

通过Navicat查询article表也成功创建了

Untitled.png

至此,所有的准备工作已经完成。接下来我们基于TypeORM完成CURD操作。

开始编写 CURD RESTful API

💡 REST API 定义了一组标准的方法来操作资源(比如 GET, POST, PUT, DELETE)。

新建 ArticleController 用于处理 article数据的增删改查。

完成HTP接口代码后,然后通过Postman进行接口调试。

javascript
import { InjectRepository } from '@nestjs/typeorm'; import { Controller, Get, Query, Header, Res, Post, Delete, Param, Put, Body, } from '@nestjs/common'; import { Article } from './models/article'; import { Repository } from 'typeorm'; @Controller('/api/article') export class ArticleController { @InjectRepository(Article) private readonly articleRepository: Repository<Article>; }

一、增

通过articleRepository的save方法新增数据

javascript
@Controller('/api/article') export class ArticleController { @InjectRepository(Article) private readonly articleRepository: Repository<Article>; @Post() async createArticle() { const article = await this.**articleRepository.save**({ title: '文章名称', content: '内容内容内容内容内容', isPublish: true, }); return article; } }

Untitled.png

Untitled.png

二、删

通过articleRepository的delete方法删除数据

javascript
@Controller('/api/article') export class ArticleController { @InjectRepository(Article) private readonly articleRepository: Repository<Article>; @Delete('/:id') async deleteArticle(@Param() params) { const { id } = params; await this.**articleRepository.delete**({ id }); return 'ok'; } }

Untitled.png

三、改

通过articleRepository的update方法新增数据

javascript
@Controller('/api/article') export class ArticleController { @InjectRepository(Article) private readonly articleRepository: Repository<Article>; @Put() async updateArticle(@Body() body) { const { id, title } = body; await this.**articleRepository.update**({ id }, { title }); return 'ok'; } }

Untitled.png

Untitled.png

四、查

通过articleRepository的find方法查询数据

javascript
@Controller('/api/article') export class ArticleController { @InjectRepository(Article) private readonly articleRepository: Repository<Article>; @Get() async getArticle() { const articles = await this.**articleRepository.find**(); return articles; } }

Untitled.png

总结

本文基于Nestjs和TypeORM实现了最基础的CURD接口,也提供了对应的实战代码和效果截图,希望能够帮助到有需要的朋友。