基础 mysql 数据库和 Typeorm 首先从离前端比较远的数据库讲起。...Nest.js 结合 Typeorm Typeorm 是做把对象的操作通过 sql 同步为对数据库操作的 orm 的,而 Nest.js 是做 Web 后端应用的 MVC 分层以及通过 IOC 管理对象的创建和依赖的...和 Nest.js 都是做什么的和怎么用,简单小结一下: Typeorm 是 ORM 框架,用于把对象的操作同步为对数据库的操作,会自动执行 sql 语句。...我们重点来看下 Controller 的代码: import { Controller, Get, Post, Body, Patch, Param, Delete } from '@nestjs/common...@Get、@Post、@Patch、@Delete 分别对应不同的请求方式。 @Param 是取路径中的参数,@Query 是取查询字符串的参数。
getStaticProps 在构建时请求数据。...}, //当请求进入的时候再次生成文章详情页,比如修改文章重新生成 // 1s 内最多生成1次 revalidate: 1, } } export default Post...Prisma 支持 Mysql、Postgresql 和 Sqlite, 访问官网我们可以很容易的上手,也可以快速的从老项目接入 虽然 Prisma 和 TypeORM 解决了类似的问题,但它们的工作方式却大相径庭...与 TypeORM 对比 TypeORM 是一种传统的 ORM,它将表映射到模型类。这些模型类可用于生成 SQL 迁移。然后,模型类的实例在运行时为应用程序的 CRUD 查询提供一个接口。...Prisma CRUD 查询由 Prisma Client 提供,这是一个针对 Node.js 和 TypeScript 的轻量级且完全类型安全的数据库客户端。
市面上的文章和博客看了不少,很多都浅尝辄止,写个 CRUD 就完事了,也太 easy 了,一行 nest g resource 就搞定。...=127.0.0.1 TYPEORM_PORT=3306 TYPEORM_USERNAME=root TYPEORM_PASSWORD=123456 TYPEORM_ENTITIES=dist/**/*..., }) export class StaticModule {} Very easy ~ 过 登录模块 相信细心的你一定看到上面的 @SkipJwtAuth,这是因为我全局开了 JWT 鉴权,只有请求头带有...首先,你必要熟悉 Passport.js 里的 Strategy 和 verifyCallback 概念,否则咱还是别聊了。...mockUserRepository, 'findOne').mockImplementation(async () => { return mockUsers[0]; }); // 找到 userId 为
(GET、POST、PUT、PA TCH、DELETE)和 URL 端点之间的关系。...如getBlogAndAuthor,这样直接为调用方“定制”一个接口,请求一条就得到就调用方想要的数据。...GraphQL REST API 构建在请求方法(method)和端点(endpoint)之间的连接上,而 GraphQL API 被设计为只通过一个端点,即 /graphql,始终使用 POST...避免了返回结果中不必要的数据字段。...这里你只需要知道 GraphQL 能够执行基本的 CRUD 即可。 fragmen 和 subscribtion 此外还有 fragment 与 subscription 就不做介绍。
// 可以匹配到 post请求,http://localhost:9080/app/list @Post("list") create():string{...} // 2.通配符路径...这里要提一个关于路由匹配时的注意点, 当我们有一个put请求,路径为/app/list/user,此时,我们在app.controller.ts控制器文件中增加一个方法: @Put("list/user...)模块作为案例, 实现文章简单的CRUD,带大家熟悉一下这个过程。...CRUD 好了,接下来就进行数据操作,前面我们说通过代码来建表, TypeORM是通过实体映射到数据库表,所以我们先建立一个文章实体PostsEntity,在posts目录下创建posts.entity.ts...什么意思呢, 通俗来讲就是,对请求接口的入参进行验证和转换的前置操作,验证好了我才会将内容给到路由对应的方法中去,失败了就进入异常过滤器中。
true, name: 'update_time' }) updateTime: number; } 上面的内容定义的是表的字段及字段类型等 2 新建controller 这里定义了四个路由,全部为post..., Post, Body, Logger } from '@nestjs/common'; import { UserService } from '....'; import { Repository } from 'typeorm'; import { User } from '....export class UserModule {} 5 新建Dto Dto文件夹有四个文件,分别为addUser.dto.ts、deleteUser.dto.ts、queryUser.dto.ts和updateUser.dto.ts...最后结果 ?
Components 一般用于做 Services,比如将数据库 CRUD 封装在 Services 中,每个 Service 就是一个 Component。...UsersController { @Get('users') getAllUsers() {} @Get('users/:id') getUser() {} @Post...3.1 Typeorm 有了如此强大的后端框架,必须搭配上同等强大的 orm 才能发挥最大功力,Typeorm 就是最好的选择之一。...至于类型,Typeorm 通过反射,拿到了类型定义,自动识别 id 为数字类型、name 为字符串类型,当然也可以手动设置 type 参数。...这带来的好处就是,我们放心执行任何 CRUD 语句,完全不需要做错误处理,当校验失败或者数据库操作失败时,会自动终止执行后续代码,并返回给客户端友好的提示: @Post() async add( @
400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作,该操作是幂等的。...410 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。 422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。...get/post/put/delete为CRUD操作 面向资源,一目了然,具有自解释性。 数据描述简单,一般以xml,json做数据交换。...适合CRUD并且只适合CRUD,有的浏览器可能不支持POST、GET之外的提交方式,要特殊处理,API容易给让误解中能进行增、删、查、改等操作。...CRUD:是指在做计算处理时的增加(Create)、读取查询(Retrieve)、更新(Update)和删除(Delete)几个单词的首字母简写。
当你使用 userRepository.findOne({ where: { id: null } }) 时,从开发者的预期来看所返回的结果应该为 null 才对,但结果却是大跌眼镜,结果所返回的是 user...我举几个例子: 在 TypeORM 中,你需要 select 选择某个实体的几个字段,你可以这么写 你会发现 post 对象的类型提示依旧还是 postEntity,没有任何变化。...但从开发者的体验角度而言,**既然我选择查询 id 和 title 两个字段,那么你所返回的 post 类型应该也只有 id 与 title 才更符合预期。...**而后续代码中由于允许 post 有 body 属性提示,那么 post.body 为 null 这样不必要的结果。...许多涉及多表的 CRUD操作可以通过一条简洁的表达式来完成,而在使用 TypeORM 时,常常需要编写繁琐臃肿的 queryBuilder。
POST一般向“资源集合”型uri发起 POST/animals //新增动物 POST/zoos/1/employees //为id为1的动物园雇佣员工 PUT:更新单个资源(全量),客户端提供完整的更新后的资源...安全性 幂等性 GET √ √ POST × × PUT × √ DELETE × √ 安全性和幂等性均不保证反复请求能拿到相同的response。...§200 OK - [GET]:服务器成功返回用户请求的数据,该操作是幂等的(Idempotent)。 §201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。...§400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作,该操作是幂等的。...各HTTP方法成功处理后的数据格式: · response 格式 GET 单个对象、集合 POST 新增成功的对象 PUT/PATCH 更新成功的对象 DELETE 空 五、错误处理 1.
本文通过学生对象为例,无需编程,通过配置实现CRUD RESTful API。...概要 CRUD简介 crud是指在做计算处理时的增加(Create)、检索(Retrieve)、更新(Update)和删除(Delete)几个单词的首字母简写。...:/api/business/{name},其中name为对象名称复数形式(兼容对象名称) 业务数据 通过post man验证API 创建学生 [postman] 请求URL /api/business...为id 查询id为1的学生详情 [getstudent] 请求URL /api/business/students/1 返回body { "id": 1, "name": "诸葛亮"...1分钟 基本为0 综上所述,利用crudapi系统可以极大的提高工作效率和节约成本,让数据处理变得更简单!
这里对应的HTTP方法是POST。 POST请求的参数通常存放在请求的body里面,所以公司的信息就放在了body里面。...HTTP 用来表示更新信息的方法是 PATCH,所以整个请求时 PATCH api/companies/{companyId}。注意PATCH表示对资源进行局部更新。...和POST一样,PATCH的参数也位于请求的body里面。例如,如果你想更新公司的名称,那么就要把新的公司名称放在body里面。 PATCH的请求无需返回任何东西。...和 POST 一样,PUT的参数也位于请求的body里面。 如果是替换现有资源,那么无需返回任何东西;但如果是创建资源的操作,就应该返回新创建的资源。...例如,DELETE api/companies/12 并不意味着id为12的公司信息从数据库中被删除了,也许只是把该公司的信息的状态设置为deleted而已。
HTTP 动词,可能很多人第一眼看到的时候有点蒙,不知道是啥,其实就是我们请求网页时用的 GET、POST 等操作。...我们平时用的最多的就是 GET 和 POST(例如写爬虫的时候,基本都是这两种),常用的还有 PUT、PATCH、DELETE 。...对资源的操作,无外乎 CRUD(增删改查),RESTful 中,每个 HTTP 动词对应一个 CRUD 操作。...POST 和 PUT 的区别 一般说到 HTTP 动词对应 CRUD 的时候,PUT 都是对应 Update 操作的。...幂等性:PUT 是幂等的,而 POST 是非幂等的。关于幂等性,见下文。 2.4 PATCH 和 PUT 的区别 PATCH 是 2010 后成为的正式 http 方法,它是对 PUT 的补充。
前端内部写的后端应用基本上功能并不会太多(太专业的后端服务交给后端开发来做),绝大部分是基础的操作,在这样的情况下会涉及到很多重复工作量要做,基本都是一样的套路: 初始化项目脚手架 数据库的连接操作 + CRUD...这两种模式没有谁比谁好之分,只有适不适合之别: 简单的 CRUD、试水型的 Demo 项目,用 Active Records 模式的 ORM 框架更好 业务流程和规则较多的、成熟的项目改造用 Data...不同于现有的所有其他 JavaScript ORM 框架,TypeORM 支持 Active Record 和 Data Mapper 模式(在我这次写的项目中,使用的是 Active Record...小结 距离上次写 Node.js 后台应用有段时间了,当时的技术栈和现在的没法比,现在尤其得益于使用 Decorator(装饰器语法) + DI(依赖注入)风格写业务逻辑,再搭配使用 typeorm (...参考文章 ORM 实例教程:阮一峰教程,解释 ORM,通俗易懂 架构模式中的 Active Record 和 Data Mapper 什么是 ActiveRecord 模式 typeorm数据库ORM框架中文文档
REST 对请求的约定 REST 用来规范应用如何在 HTTP 层与 API 提供方进行数据交互;在现阶段,你应该已经很熟悉 GET 和 POST 请求;甚至有可能因为受限于后端框架限制等原因,你的整个应用全都是用这两种...请求的方法 在很多系统中,几乎只用 GET 和 POST 方法来完成了所有的接口操作;这个行为类似于全用 DIV 来布局。...实际上,我们不只有GET 和 POST 可用,在 REST 架构中,有以下几个重要的请求方法:GET,POST,PUT,PATCH,DELETE。这几个方法都可以与对数据的 CRUD 操作对应起来。...POST /api/users { "name": "John Snow" } 【Update】资源的更新,用于更新的 HTTP 方法有两个,PUT 和 PATCH。...比如下面这面这个接口就表示搜索 ID 为 123 的图书馆的书,并且书的信息里包含关键字「game」,返回前十条满足条件的结果。 GET /api/libraries/123/books?
数据表关系 前面文章中已经说了TypeORM建表时,是通过@Entity()装饰的class 映射为数据表, 所以实体中的关系也就是表关系。...接下来探索一下如何用TypeORM创建一对一、一对多和多对多的关系。 一对一 一对一指的是表中一条数据仅关联另外一个表中的另一条数据。例如用户表和用户档案表, 一个用户只有一份档案。...我们在TypeORM中如何实现user表和info之间这种对一对的关系呢?...,其中User和Category与 Post是一对多关系,而Tag与Post是多对多。...然后需要对分类和标签的插入进行处理,同时还需要判断status是草稿draft还是发布publish, 如果是publish,需要设置publishTime为当前时间。
REST 对请求的约定 REST 用来规范应用如何在 HTTP 层与 API 提供方进行数据交互;在现阶段,你应该已经很熟悉 GET 和 POST 请求;甚至有可能因为受限于后端框架限制等原因,你的整个应用全都是用这两种...请求的方法 在很多系统中,几乎只用 GET 和 POST 方法来完成了所有的接口操作;这个行为类似于全用 DIV 来布局。...实际上,我们不只有GET 和 POST 可用,在 REST 架构中,有以下几个重要的请求方法:GET,POST,PUT,PATCH,DELETE。这几个方法都可以与对数据的 CRUD 操作对应起来。...POST /api/users { "name": "John Snow" } 【Update】,资源的更新。用于更新的 HTTP 方法有两个,PUT 和 PATCH。...比如下面这面这个接口就表示搜索 ID 为 123 的图书馆的书,并且书的信息里包含关键字「game」,返回前十条满足条件的结果。 GET /api/libraries/123/books?
领取专属 10元无门槛券
手把手带您无忧上云