nest入门教程

news2024/11/26 20:44:11

1.介绍:

Nest (NestJS) 是一个用于构建高效、可扩展的 Node.js 服务器端应用的框架。它使用渐进式 JavaScript,构建并完全支持 TypeScript(但仍然允许开发者使用纯 JavaScript 进行编码)并结合了 OOP(面向对象编程)、FP(函数式编程)和 FRP(函数式反应式编程)的元素。对于入门我感觉只要知道他是nodejs的框架就行

2.下载依赖,创建项目

安装全局依赖:
	pnpm add -g @nestjs/cli
创建项目
  nest new test //创建一个名为test的项目
修改执行指令

进入package.json,找到下面这行代码 (其执行指令为 pnpm start:dev)

 "start:dev": "nest start --watch", 

将其改为(其执行指令为 pnpm dev)

   "dev": "nest start --watch",

根据你的习惯而定

3.在项目中创建服务,控制器,模块等

在终端输入 nest,他会展示以下内容,告诉你你可以创建的东西

 注意红色框框里的,他意味每当创建一个东西时都需加上 g

如创建一个服务 nest g s hd -h (意味着该服务的名字为hd,加上 -h 以为查看创建的选项)

 --no-spec 为创建的提供器,控制器等不携带测试案例,具体自己测试吧

这里提一个比较好用的指令

nest g res xxx --no-spec

执行这个命令,能帮你创建一整个模块,意味着提供器,控制器,模块都帮你创建出来,甚至dto都帮你创建出来

4.使用

        控制器负责处理传入请求并向客户端返回响应。

 创建一个控制器
nest g co user --no-spec
import { Controller, Get } from '@nestjs/common';

@Controller('user')
export class CatsController {
  @Get()
  findAll(): string {
    return 'This action returns all user';
  }
}

 @Controller() 为装饰器,他是必须的,我们通过他将user分为一组,仅对user进行增删改查,这样我们就不必为文件中的每个路由重复该部分路径。

@Get() 为HTTP请求方法装饰器,用于告诉 Nest 为 HTTP 请求的特定端点创建处理程序,端点对应于 HTTP 请求方法(在本例中为 GET)和路由路径,处理程序的路由路径通过连接为控制器声明的(可选)前缀和方法装饰器中指定的任何路径来确定,Nest 会将Get/user请求映射到这个处理程序 。 说白了,你请求这个数据的路径需要添加后缀 /user,

例如 :一般nest的端口号为 3000 ,如果@Controller()里面啥也没写,你打开服务后只需在浏览器中输入 localhost:3000就能请求到,但加了user 就的输入 localhost:3000/user

请求对象

我们可以通过将装饰器添加到处理程序的签名来指示 Nest 注入它来访问请求对象。

下面是提供的装饰器列表和它们代表的普通平台特定对象

 就是通过这些装饰器来获取请求对象

nest使用的是ts需要对类型加以限制,所以在使用时最好下载软件包 @types/express

提供器

1.介绍

许多基本的 Nest 类可以被视为提供器 - 服务、存储库、工厂、助手等等,提供器的主要思想是它可以作为依赖注入。我的理解是,服务器用来写函数供控制器使用,以及其他提供器使用

2.创建提供者

nest g s user --no-spec
//user.service.ts
import { Injectable } from '@nestjs/common';

@Injectable()
export class UserService {
    sayHellow(){
        return "你好"
    }
}
//user.controller.ts

import { Controller, Get } from '@nestjs/common';
import { UserService } from './user.service';

@Controller('user')
export class UserController {

    constructor(private userService:UserService){}    //依赖注入
    @Get("user")
    findAll(){
        return this.userService.sayHellow()
    }
}

3.模块

后端提供的服务都是由一个一个模块组合起来的,

创建模块

nest g mo user --no-spec

 对于单个模块,其里面的提供器需注入到providers 控制器需注入到controllers(需要特别注意,不然debug得找很久)

//user.module.ts
import { Module } from '@nestjs/common';
import { UserController } from './user.controller';
import { UserService } from './user.service';

@Module({
    controllers: [UserController],
    providers: [UserService],
 
})
export class UserModule {}

 如果你创建了一个提供器,没有创建对应模块,需要在根模块app.module.ts中注册(一般nest会帮你注册)

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

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

相关文章

LLM技术

LLM 是利用深度学习和大数据训练的人工智能系统,专门设计来理解、生成和回应自然语言。这些模型通过分析大量的文本数据来学习语言的结构和用法,从而能够执行各种语言相关任务。以 GPT 系列为代表,LLM 以其在自然语言处理领域的卓越表现&…

【Node.js快速部署opencv项目】图像分类与目标检测

⭐️我叫忆_恒心,一名喜欢书写博客的研究生👨‍🎓。 如果觉得本文能帮到您,麻烦点个赞👍呗! 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧,喜欢的小伙伴给个三连支…

Java Web学习笔记22——前端工程化

实际的前端开发: 前端工程化:是指在企业级的前端项目开发中,把前端开发所需的工具、技术、流程、经验等进行规范化、标准化。 环境准备: vue-cli: 介绍:vue-cli是Vue官方提供的一个脚手架,用于…

推荐云盘哪个好,各有各的优势

选择合适的云盘服务是确保数据安全、便捷分享和高效协作的关键。下面将从多个维度对目前主流的云盘服务进行详细的对比和分析: 速度性能 百度网盘青春版:根据测试,其上传和下载确实不限速,但主要定位是办公人群,适用于…

STM32快速入门(ADC数模转换)

STM32快速入门(ADC数模转换) 前言 ADC数模转换存在的意义就是将一些温度传感器、各自数据传感器产生的模拟信号转换成方便识别和计算的数字信号。 导航 图24 通用定时器框图: 图片截取自STM32 F1XX中文参考手册。还是以框图为中心&#x…

MySQL—多表查询—标量子查询

一、引言 上篇学习完子查询的概念和分类。 现在来学习第一种子查询——标量子查询。 (1)标量子查询的基本概念 子查询返回的结果是单个值,也就是一行一列(可以是数字、字符串、日期等) 是一种最简单的子查询形式&am…

Go 语言的函数详解:语法、用法与最佳实践

在 Go 语言的世界里,函数是构建和维护任何应用程序的基石。不仅因为它们提供了一种将大问题划分为更小、更易管理部分的方法,而且还因为它们在 Go 程序中扮演着至关重要的角色。从简单的工具函数到复杂的系统级调用,理解和利用 Go 的函数特性…

论文阅读:All-In-One Image Restoration for Unknown Corruption

发表时间:2022 cvpr 论文地址:https://openaccess.thecvf.com/content/CVPR2022/papers/Li_All-in-One_Image_Restoration_for_Unknown_Corruption_CVPR_2022_paper.pdf 项目地址:https://github.com/XLearning-SCU/2022-CVPR-AirNet 在本文…

Mysql使用中的性能优化——索引对插入操作的性能影响

当我们往表中插入数据时,如果表中有索引,则会给插入操作增加更多的工作量。带来的好处是可以提升查询效率。但是这种优劣该如何权衡,则需要通过数据对比来提供佐证。本文我们将对比没有索引、有一个普通索引、有一个唯一索引的性能差距。 结…

UniAnimate:华科提出人类跳舞视频生成新框架,支持合成一分钟高清视频

节前,我们星球组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、参加社招和校招面试的同学。 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 合集&#x…

堆排序讲解

前言 在讲堆的删除时,我们发现一步一步删除堆顶的数据,排列起来呈现出排序的规律,所以本节小编将带领大家进一步理解堆排序。 1.堆排序概念 那么什么是堆排序? 堆排序(Heap Sort)是一种基于堆数据结构的排…

如何从 Android 图库中恢复误删除的照片

如果您正在阅读这篇文章,那么您肯定意外地从 Android 设备中删除了照片。并且您正在寻找一种简单的方法来恢复 Android 图库中已删除的照片。 从图库恢复已删除的照片 随着技术的进步,现在使用单个设备(即 Android 手机)&#xf…

vue27:脚手架详细介绍main.js

在 Vue.js 中,render 函数是一个可选的选项,它允许你自定义组件的渲染逻辑。 如果你没有在 Vue 实例中提供 render 函数,Vue 将使用模板(template)来生成虚拟 DOM。 以下是render / template 两种方式的比较&#…

C++ Qt实现http url启动本地应用程序

更多Qt文章,请访问《深入浅出C++ Qt开发技术专栏》:https://blog.csdn.net/yao_hou/category_9276099.html 文章目录 1、注册自定义协议2、编写web页面3、编写C++应用程序我们在使用腾讯会议时经常会通过http链接打开本地的腾讯会议,例如下图: 打开会议发起人给的链接,会出…

Python代码大使用Paramiko轻松判断文件类型,提取上级目录

哈喽,大家好,我是木头左! 一、Paramiko简介 Paramiko是一个用于SSHv2协议的Python实现,提供了客户端和服务器功能。它可以用于远程连接和管理服务器,执行命令、上传下载文件等。本文将介绍如何使用Paramiko判断文件类…

树莓派4B 零起点(二) 树莓派 更换软件源和软件仓库

目录 一、准备工作,查看自己的树莓派版本 二、安装HTTPS支持 三、更换为清华源 1、更换Debian软件源 2,更换Raspberrypi软件仓库 四、进行软件更新 接前章,我们的树莓派已经启动起来了,接下来要干的事那就是更换软件源和软件…

LeetCode ---400周赛

题目列表 3168. 候诊室中的最少椅子数 3169. 无需开会的工作日 3170. 删除星号以后字典序最小的字符串 3171. 找到按位与最接近 K 的子数组 一、候诊室中的最少椅子数 简单的模拟题,我们可以这样来模拟:当有顾客来时,我们加一把椅子&…

java并发控制(猴子摘桃例子)

【问题】 有n个桃子, 猴子A每次固定摘2个,猴子B每次固定摘3个,这2只猴子不断摘桃子直到剩余桃子数量不足以摘(必须满足摘桃个数); 【1】 使用AtomicInteger(推荐) 1)利…

11 深入理解Linux文件系统与日志分析

目录 11.1 深入理解Linux文件系统 11.1.1 inode与block详解 1. inode和block概述 2. inode的内容 3. inode的号码 4. inode的大小 11.1.2 硬链接与软连接 1. 硬链接 2. 软连接 11.1.3 EXT类型文件恢复 1. 编译安装extundelete 2. 模拟删除并执行恢复操作 11.1.4 xfs类型文件备…

【Centos】深度解析:CentOS下安装pip的完整指南

【Centos】深度解析:CentOS下安装pip的完整指南 大家好 我是寸铁👊 总结了一篇【Centos】深度解析:CentOS下安装pip的完整指南✨ 喜欢的小伙伴可以点点关注 💝 方式1(推荐) 下载get-pip.py到本地 sudo wget https://bootstrap.p…