nestjs+typeorm+mysql基本使用学习

这篇具有很好参考价值的文章主要介绍了nestjs+typeorm+mysql基本使用学习。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

初始化项目

安装依赖

npm i -g @nest/cli

新建项目

nest new project-name

命令行创建

创建Controller:nest g co test
创建Module:nest g mo test
创建Service:nest g service test

请求创建

123123

接口文档swagger

安装依赖

npm install @nestjs/swagger swagger-ui-express

装饰器

Controller装饰器:@ApiTags(“Controller标签”)
Controller装饰器:@ApiBearerAuth(),用于token鉴权,在文档页设置token
Api装饰器:@ApiOperation({ summary: ‘Api摘要’, description: ‘Api描述’ })
模型字段装饰器:@ApiProperty({ description: ‘字段描述’ }),字段必填
模型字段装饰器:@ApiPropertyOptional({ description: ‘字段描述’ }),字段非必填

注册使用

// main.ts
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import {
  DocumentBuilder,
  SwaggerDocumentOptions,
  SwaggerModule,
} from '@nestjs/swagger';

const app = await NestFactory.create(AppModule, { cors: true });

const swaggerOption = new DocumentBuilder()
    .setTitle('接口文档') // 文档标题
    .setDescription('用来展示API信息') // 文档描述
    .setVersion('1.0') // 文档版本号
    .addTag('') // 标签
    .addBearerAuth() // token鉴权
    .build();
    
const document = SwaggerModule.createDocument(app, swaggerOption);
// 第一个参数是文档访问路径前缀
SwaggerModule.setup('doc', app, document);

await app.listen(3000);
// 访问文档路径:http://localhost:3000/doc

管道(验证)

安装依赖

npm install class-validator class-transformer

装饰器

模型字段装饰器:@IsNotEmpty({ message: “xxx字段为必填项” })

常用方法

import { isBoolean, isNumber, isArray, validate} from 'class-validator';
import { plainToClass } from 'class-transformer';
// isBoolean 是否为布尔值
// isNumber 是否为数字
// isArray 是否为数组
// validate 验证配置的验证规则
// plainToClass 将对象转换为Class,用以获取验证规则进行验证

注册使用

管道使用需要注册:
在main.ts中全局注册管道:

// main.ts
import { ValidationPipe } from '@nestjs/common';
app.useGlobalPipes(new ValidationPipe());

数据库操作(TypeORM+MySql)

安装依赖

npm i typeorm mysql

数据源

实体

装饰器

实体是由@Entity装饰器装饰的模型。

// name对应数据库表名,schema对应数据库名,name可简写
@Entity({name:"table_name",schema:"schema_name"})
@Entity({"table_name",schema:"schema_name"})

表列是由@Column装饰器装饰的实体属性。
主列是由@PrimaryColumn装饰器装饰的实体属性。
自动生成的列是由@PrimaryGeneratedColumn装饰器装饰的实体属性。

列数据类型

数据类型一般会根据实体属性定义的类型进行推断,如:number将被转换为integer,string将转换为varchar,boolean转换为bool等。也可以自行设置,如下:

// type可以简写
@Column("int")

@Column({type: "int"})

@Colunm("int", {name: "field_name", length: 100, unique: true, ...})

更多配置。

关系

import { Entity, Column, PrimaryGeneratedColumn, ManyToOne, OneToMany, OneToOne, JoinColumn } from "typeorm";

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

    @Column()
    name: string;

    @Column()
    description: string;

	@OneToOne(type => Category)
	@JoinColumn()
	item: Category;

    @OneToMany(type => Category, category => category.children)
    parent: Category;

    @ManyToOne(type => Category, category => category.parent)
    children: Category;
}

@OneToOne:一对一
@OneToMany:一对多,总是包含反向关系,不能单独出现,需要和@ManyToOne一起使用,关系拥有者为多对一的一侧
@ManyToOne:多对一
@JoinColumn:实体键的对应关系,仅在关系的一侧使用,关系拥有者使用,关系的拥有方包含数据库中具有外键的列
TODO:多对多比较复杂,还需研究
@ManyToMany:多对多
@JoinTable():需要指定这是关系的所有者方

参数1,type=>Category,返回当前实体想要建立关系的目标实体类
参数2,category=>category.xxx,用以指定反向关系,当前实体存储在目标实体的xxx属性

Entity Manager 和 Repository

Entity Manager,实体管理器,可以管理(insert, update, delete, load 等)任何实体。EntityManager 就像放一个实体存储库的集合的地方。

Repository就像EntityManager一样,但其操作仅限于具体实体。文章来源地址https://www.toymoban.com/news/detail-621406.html

到了这里,关于nestjs+typeorm+mysql基本使用学习的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Node.js-模块化理解及基本使用

    讲一个复杂的程序文件按照一定的规则拆分成多个独立的小文件,这些小文件就是小模块,这就是模块化。 每个小模块内部的数据是私有的,可以暴露内部数据给外部其他模块使用。 减少命名的冲突 提高复用性 提高可维护性 按需加载 1.单个模块暴露 2.多个模块暴露 暴露数

    2024年02月14日
    浏览(53)
  • vue3+ts+element-plus 之使用node.js对接mysql进行表格数据展示

    * 初始化node 查看node是否安装 node -v 初始化命令 npm init 初始化配置解释如下: 完成后会有一个package.json文件 * 安装可能用到的依赖 根据需求安装,我这里需要对接mysql,安装依赖 ,我是一次性安装完,后边会直接使用,也可以边安装边使用。如下 安装成功如下: * 配置文件

    2024年02月15日
    浏览(51)
  • 使用宝塔面板部署Node.js+Mysql服务和Vue3-Admin项目到云服务器上

    准备工作 一台云服务器,可以先用免费试用一个月的服务器进行练手;我这里选择的是腾讯云的轻量云服务器; 1、在云服务器上安装宝塔面板 宝塔面板官网地址:https://www.kancloud.cn/chudong/bt2017/424209 1.1 安装Xshell脚本工具,通过这个工具来连接云服务器,进行宝塔面板的安装

    2024年01月25日
    浏览(56)
  • WebSocket简述及通过node.js的基本实现

    WebSocket是自Html5开始在单个TCP连接上进行全双工通信 1 的协议,它使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

    2024年02月09日
    浏览(37)
  • 学习node之——如何在项目中使用MySQL、前后端的身份认证

    上一篇文章只写了一丢丢,这篇才是正片,look look look 这里连接数据库的用户和密码都是我们在安装mysql时配置的密码。每个人的users表格里面数据不同,结果也会不一样哟! 巧2小黑板啦!这里有两个知识点: 1、可以通过英文?符号占位符指定具体的值 2、用insert into插入数

    2024年02月10日
    浏览(46)
  • Node.js的基本概念&&node -v 和npm -v 这两个命令的作用

    Node.js 是一个开源且跨平台的 JavaScript 运行时环境,它可以让你在服务器端运行 JavaScript 代码。Node.js 使用了 Chrome 的 V8 JavaScript 引擎来执行代码,非常高效。 在 Node.js 出现之前,JavaScript 通常只在浏览器中运行,用于控制网页行为和与用户交互。Node.js 的出现让 JavaScript 能够

    2024年02月08日
    浏览(57)
  • 【Node.js从基础到高级运用】七、基本的网络编程

    在这一节中,我们将介绍 Node.js 在网络编程方面的基础,特别是如何使用 Node.js 创建一个 HTTP 服务器。这是构建 Web 应用和服务的核心技能。 Node.js 的 http 模块提供了创建 HTTP 服务器和客户端的能力。以下是创建一个基本 HTTP 服务器的步骤: 步骤 1: 导入 http 模块 首先,在你

    2024年03月16日
    浏览(49)
  • 学习笔记-mysql-各种函数的基本使用

    count , sum , min , max ,avg , group_concat() (1). if逻辑判断 (2). case when mysql 8.0之后增加的,也称为开窗函数 (1). 序号函数 row_number( ) --排序 1,2,3 rank( ) --排序 1,1,3 dense_rank( ) --排序 1,1,2 另外还有开窗聚合函数:sum avg min max (2). 分布函数 cume_dist() 用途:分组内小于、等于当前rank值的行数

    2024年01月20日
    浏览(46)
  • node.js(express.js)+mysql实现注册功能

    /utils/db.js文件的代码如下: 项目安装指定版本bcryptjs库 再插入新用户时输入中文username mysql会 出现字符集不匹配的情况 报错情况如下: ER_CANT_AGGREGATE_2COLLATIONS: Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation ‘=’ 原因: mysql数据库建表的时候采

    2024年01月18日
    浏览(48)
  • node.js(express.js)+mysql实现登录功能

    实现步骤 1.检测表单数据是否合法 2.根据用户名查询用户的数据 3.判断用户输入的密码是否正确 4.生成JWT 的 Token 字符串 登录接口完整代码如下:controllers/user.js文件 一、检测登录表单的数据是否合法 1)安装 jOi 包,为表单中携带的每个数据项,定义验证规则: (2)安装 @e

    2024年01月19日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包