Nest.js总结

参考Nest中文文档

启动项目

全局安装Nest.js脚手架,然后利用脚手架创建一个新项目指令如下所示:

$ npm i -g @nestjs/cli$ nest new my-project-name

要使用 TypeScript 的 更严格 功能集创建新项目,请将 --strict 标志传递给 nest new 命令。
如下所示:nest new [my-project-name] --strict


项目文件

打开刚刚创建的项目文件,展开如下图所示:

├── my-test
│ ├── src
│ │ ├── app.controller.spec.ts
│ │ ├── app.controller.ts
│ │ ├── app.module.ts
│ │ ├── app.service.ts
│ │ └── main.ts
│ ├── test
│ │ ├── app.e2e-spec.ts
│ │ └── jest-e2e.json
│ ├── package.json
│ ├── README.md
│ ├── tsconfig.json
│ ├── …

文件名说明
app.controller.spec.ts控制器的单元测试。
app.controller.ts具有单一路由的基本控制器。
app.module.ts应用的根模块。
app.service.ts具有单一方法的基本服务。
main.ts使用核心函数 NestFactory 创建 Nest 应用实例的应用入口文件。
test/*模块的单元测试文件。

启动项目需要热更新的可以运行指令"start:dev"


创建一个控制器

$ nest g controller [name]

要使用 CLI 创建控制器,只需执行 $ nest g controller [name] 命令即可。
为了避免生成测试文件,你可以传递 --no-spec 标志,如下所示:nest g resource [name] --no-spec

// cats.controller.ts
import { Controller, Get, Post } from '@nestjs/common';@Controller('cats')
export class CatsController {@Post()create(): string {return 'This action adds a new cat';}@Get()findAll(): string {return 'This action returns all cats';}
}

Nest 为所有标准的 HTTP 方法提供装饰器:@Get()、@Post()、@Put()、@Delete()、@Patch()、@Options() 和 @Head()。

状态码
// code.controller.ts
import { Controller, HttpCode, Post } from '@nestjs/common';@Controller('code')
export class CodeController {@Post()@HttpCode(204)create() {return 'This action adds a new cat';}
}
重定向
// redirect.controller.ts
import { Controller, Get, Redirect } from '@nestjs/common';@Controller('redirect')
export class NofoundController {@Get()@Redirect('/')redirectToNewRoute() {}
}

使用数据库

本地安装一个MySQL,然后启动数据库服务,为了方便演示,使用phpStudy这个集成环境;

在项目安装访问数据库的模块:

$ npm install --save @nestjs/typeorm typeorm mysql2

安装过程完成后,我们可以将 TypeOrmModule 导入到根 AppModule 中。

// app.module.ts
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';@Module({imports: [TypeOrmModule.forRoot({type: 'mysql',host: 'localhost',port: 3306,username: 'root',password: 'root',database: 'test',entities: [],synchronize: true,}),],
})
export class AppModule {}

以上链接数据库的方式可通过配置config,使用环境变量传递,如下所示:

DATABASE_USER=root
DATABASE_PASSWORD=root
实现一个新增接口

import { Injectable } from '@nestjs/common';
import { CreateUserDto } from './dto/create-user.dto';
import { InjectRepository } from '@nestjs/typeorm';
import { User } from './entities/user.entity';
import { DataSource, Repository } from 'typeorm';@Injectable()
export class UserService {constructor(@InjectRepository(User)private usersRepository: Repository<User>,private dataSource: DataSource,) {}async create(createUserDto: CreateUserDto) {const { firstName, lastName, isActive } = createUserDto;try {await this.usersRepository.createQueryBuilder('user').insert().into(User).values([{ firstName, lastName, isActive: !!Number(isActive) }]).execute();return {code: '200',data: '',msg: 'success',};} catch (error) {return {code: 'E500',data: JSON.stringify(error),msg: 'error',};}}
}
实现一个查询列表接口

import { Injectable } from '@nestjs/common';
import { CreateUserDto } from './dto/create-user.dto';
import { InjectRepository } from '@nestjs/typeorm';
import { User } from './entities/user.entity';
import { DataSource, Repository } from 'typeorm';@Injectable()
export class UserService {constructor(@InjectRepository(User)private usersRepository: Repository<User>,private dataSource: DataSource,) {}async findAll(): Promise<UserList> {const data = await this.usersRepository.createQueryBuilder('user').getMany();return {data,code: '200',msg: 'success',};}}
}

使用数据源查阅TypeORM

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/730555.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot整合Redis实现分布式锁

SpringBoot整合Redis实现分布式锁 分布式系统为什么要使用分布式锁&#xff1f; 首先&#xff0c;分布式系统是由多个独立节点组成的&#xff0c;这些节点可能运行在不同的物理或虚拟机器上&#xff0c;它们通过网络进行通信和协作。在这样的环境中&#xff0c;多个节点可能同…

Java数组常用操作

创建数组 int[] a {1,2,3};int[] a new int[]{1,2,3};int[] a new int[3];ArrayList<Integer> arr new ArrayList<>(); 添加元素 arr.add(99); //将99加入到数组末尾arr.add(3,99); //将99加入到指定索引3处访问元素 int c1 c[1]; int arr1 arr.get(1); …

方阵的特征值与特征向量

目录 特征值 & 特征向量 相关性质 特征值 & 特征向量 相关性质

BlackHole

BlackHole 文章目录 BlackHole一、关于 BlackHole功能描述 二、安装、卸载安装方式一&#xff1a;下载安装器方式二&#xff1a;使用 Homebrew 安装 卸载方式一&#xff1a;使用卸载器方式二&#xff1a;手动卸载 三、用户使用指南1、Logic Pro X2、GarageBand3、Reaper4、录制…

白鹭申论笔记-小题

基础题目: (一定要背诵,在考场那种高压环境才能写出来)1、概括类题目——申论母体最大特点之应对 分条:合并看词、写句子条理:就近合并、前置提炼就近合并:一段内、两段接前置提炼 范围内首尾句找中观词汇在已选词汇中找前置直白的材料,可以自拟总结,但不要养成习惯。…

MRI基础--k空间

k空间定义 k空间是表示 MR 图像中空间频率的数字数组。 k空间物理意义 k 空间的单元通常显示在主轴 kx 和 ky 的矩形网格上。 k 空间的 kx 和 ky 轴对应于图像的水平 (x) 和垂直 (y) 轴。然而,k 轴表示 x 和 y 方向上的空间频率而不是位置。 k 空间中的各个点 (kx,ky) 与图像…

聊一聊日常开发中如何优雅的避免那无处不在的空指针异常

在Java编程语言中&#xff0c;NullPointerException&#xff08;简称NPE&#xff09;是一种常见的运行时异常&#xff0c;当程序试图访问或操作一个还未初始化&#xff08;即值为null&#xff09;的对象引用时&#xff0c;Java虚拟机就会抛出NullPointerException。如果我们在日…

【技术】基于Github Pages搭建个人博客静态网页

写在前面&#xff1a; 如果文章对你有帮助&#xff0c;记得点赞关注加收藏一波&#xff0c;利于以后需要的时候复习&#xff0c;多谢支持&#xff01; 文章目录 一、技术基础二、新建特殊仓库三、上传网页文件四、Github Pages设置 个人网页作为仅服务个人的网页&#xff0c;一…

如何将gzip后缀压缩包重命名任意后缀名并依然通过gzip.open()读取压缩包文件内容

在 Python 中&#xff0c;gzip.open() 用于解压缩 .gz 后缀的文件。因此&#xff0c;如果您将文件的后缀从 .gz 更改为其他后缀&#xff0c;例如 .diy&#xff0c;然后尝试使用 gzip.open() 打开它&#xff0c;会导致失败&#xff0c;因为 Python 会尝试使用 gzip 解压缩它&…

USB 5V 输入 1A 双节锂电池充电管理 ICZCC5080E USB 5V 输入 1A 双节锂电池充电管理 IC替代CS5080E

概要&#xff1a; ZCC5080E 是一款 5V USB 适配器输入&#xff0c;高精度双节锂离子电池充电管理芯片。具有0V充电功能&#xff0c;涓流充电、恒流充电、恒压充电和自动截止、自动再充等一套完整充电循环的充电管理芯片。芯片内部特设 9V 抗浪涌&#xff0c;芯片应用更安全可…

【打工日常】使用docker部署IT运维管理平台CAT

​一、CAT介绍 CAT是一个专为 IT 运维从业者打造的一站式解决方案平台&#xff0c;包含资产管理、工单、工作流、仓储等功能模块。 本项目是celaraze/chemex重构版&#xff0c;原项目chemex名称弃用&#xff1b;CAT采用全新架构设计&#xff0c;大量提升使用体验的细节&#xf…

leetcode73. 矩阵置零

链接见&#xff1a;https://leetcode.cn/problems/set-matrix-zeroes/description/ 题目描述 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 AC代码 class Solution { public:void setZeroes(vec…

Trie巧妙解决前后缀问题,3045. 统计前后缀下标对 II

目录 一、题目 1、题目描述 2、接口描述 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 ​Python3 c 一、题目 1、题目描述 给你一个下标从 0 开始的字符串数组 words 。 定义一个 布尔 函数 isPrefixAndSuffix &#xff0c;它接受两个字符串参数 str…

JavaWeb笔记 --- 二、Maven

二、Maven Maven概述 所有的IDE创建的Maven项目都可以使用 Maven简介 Maven模型 Maven常用命令 Maven生命周期 Maven坐标 依赖管理 dpendencies&#xff1a;依赖 依赖范围

java-ssm-jsp-大学生互动交流网站设计与实现

java-ssm-jsp-大学生互动交流网站设计与实现 获取源码——》公主号&#xff1a;计算机专业毕设大全

STM32基础--构建自己的固件库

CMSIS 标准及库层次关系 因为基于 Cortex 系列芯片采用的内核都是相同的&#xff0c;区别主要为核外的片上外设的差异&#xff0c;这些差异却导致软件在同内核&#xff0c;不同外设的芯片上移植困难。为了解决不同的芯片厂商生产的 Cortex 微控制器软件的兼容性问题&#xff0…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:DatePicker)

日期选择器组件&#xff0c;用于根据指定日期范围创建日期滑动选择器。 说明&#xff1a; 该组件从API Version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 无 接口 DatePicker(options?: DatePickerOptions) 根据指定范…

L2----最长公共前缀(2024年3月8日)

1.编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀&#xff0c;返回空字符串 “”。 示例 1&#xff1a; 输入&#xff1a;strs [“flower”,“flow”,“flight”] 输出&#xff1a;“fl” 示例 2&#xff1a; 输入&#xff1a;strs [“dog”,“race…

java及特性的简单介绍

简介&#xff1a; 印度尼西亚有一个盛产咖啡的岛屿java&#xff0c;中文名翻译为爪哇&#xff0c;给这种新语言起码java 寓意端上一杯热咖啡。 特性&#xff1a; 1.面向对象 2.与平台无关 3.稳定安全 4.多线程 面向对象 1.面向对象语言关注的是对象&#xff0c;而不关注过程 2…

代码随想录算法训练营第35天—动态规划03 | ● *343. 整数拆分 ● *96.不同的二叉搜索树

*343. 整数拆分 https://programmercarl.com/0343.%E6%95%B4%E6%95%B0%E6%8B%86%E5%88%86.html 视频讲解&#xff1a;https://www.bilibili.com/video/BV1Mg411q7YJ 考点 动态规划 我的思路 无思路 视频讲解关键点总结 怎么想到动态规划的&#xff1f;一个数可以拆成两个数&a…