Nestjs入门学习教程
初次接触Nest,有问题欢迎指出:
简介
NestJS是一个用于构建高效、可扩展的Node.js服务器端应用程序的开发框架。简单来说是一款Node.js的后端框架。
它利用
JavaScript的渐进增强的能力,使用并完全支持TypeScript(仍然允许开发者使用纯 JavaScript 进行开发),并结合了:
- O O P ( 面 向 对 象 编 程 ) \color{red} {OOP (面向对象编程)} OOP(面向对象编程)
- F P ( 函 数 式 编 程 ) \color{red} {FP (函数式编程)} FP(函数式编程)
- F R P ( 函 数 响 应 式 编 程 ) \color{red} {FRP (函数响应式编程)} FRP(函数响应式编程)
在底层,Nest构建在强大的 HTTP 服务器框架上,例如 Express (默认),并且还可以通过配置从而使用 Fastify!
核心概念:提供一种体系结构,它帮助开发人员实现层的最大分离,并在应用程序中增加抽象。
特点
向开发者直接暴露底层框架的 API
完美支持ts
兼容express中间件(express是最早出现的轻量级的node server端框架,Nestjs能够利用所有express的中间件,使其生态完善)
层层处理,一定程度上可以约束代码(比如何时使用中间件、何时需要使用guards守卫等)。
依赖注入以及模块化的思想,提供了完整的mvc的链路,使得代码结构清晰,便于维护。
前期准备
安装好Nodejs
版本>= 10.13.0,看官网这样要求的,我安装的node版本是10.15.3,所以没有试低版本的是否可以使用。
安装好MongoDB
- mac版本的安装可以参考链接:https://blog.csdn.net/weixin_43363871/article/details/93979124。
- MongoDB的使用见NestJs(二),此次是基础。
构建
安装:
npm i -g @nestjs/cli
初始化项目:
nest new 项目名称
此步骤会让你选择使用npm 还是yarn,如下图:

启动
进入文件夹后启动:

启动后在浏览器访问
http://localhost:3000/便可出现Hello World!,说明已搭建好项目,如下图所示:
为什么通过以上2个命令访问端口就出现Hello World!呢,下面从生成的文件目录谈起:
项目目录

src下面是几个核心文件:
| 文件 | 说明 |
|---|---|
| app.controller.spec.ts | 针对控制器的单元测试 |
| app.controller.ts | 带有单个路由的基本控制器 |
| app.module.ts | 应用程序的根模块(root module) |
| app.service.ts | 具有单一方法的基本服务(service) |
| main.ts | 应用程序的入口文件,它使用核心函数 NestFactory 来创建 Nest 应用程序的实例 |
核心
模块Module, 控制器Controller, 服务与依赖注入Provider Dependency injection。
模块Module: 用于将代码拆分为独立的和可重用的模块。
例如用户信息模块,然后将该用户模块的控制器和服务集合进来,最后直接将用户模块导入到根
Module就可以使用了。控制器Controller: 负责处理客户端传入的请求参数并向客户端返回响应数据。
nest.js提供许多http请求的装饰器,如例如
@Body(),@Post()等。控制器不需要定义任何诸如从客户端获取数据、验证用户输入等工作,这些都是交给服务Provider处理,通过把任务委托给各种服务,可以让控制器类更加精简、高效。服务Provider :在这里处理所有请求执行逻辑,在控制器中通过
constructor函数以依赖注入的方式实现。constructor(private readonly catsService: CatsService) {}
控制器的目的是接收应用的特定请求。路由机制控制哪个控制器接收哪些请求。通常,每个控制器有多个路由,不同的路由可以执行不同的操作。
为了创建一个基本的控制器,我们必须使用装饰器。装饰器将类与所需的元数据关联,并使Nest能够创建路由映射(将请求绑定到相应的控制器)。
Nestjs路由
以下例子中,使用了定义基本控制器所需的@Controller('cats')装饰器。将可选前缀设置为cats。使用前缀可以避免在所有路由共享通用前缀时出现冲突的情况。
用CLI创建控制器执行命令(也可以手动创建):
nest g controller cats,src下面会多出文件夹cats:
cats.controller.ts
Get路由
在该文件加入以下代码:@Get()
findAll(): string {
return 'This action returns all cats';
}findAll()方法之前的@Get()HTTP请求方法装饰器告诉Nest为HTTP请求的特定端点创建处理程序。访问路由:
http://localhost:3000/cats
创建了一个端点来获取数据—— G E T 路 由 \color{purple}{GET路由} GET路由 。 那创建新记录的端点呢?Post路由
继续在
cats.controller.ts文件中加入以下代码:@Post()
create(): string {
return 'This action adds a new cat';
}
Put路由
在
cats.controller.ts文件中加入以下代码:@Put(':id')
update(@Param('id') id: string) {
return `This action updates a #${id} cat`;
}
Delete路由
在
cats.controller.ts文件中加入以下代码:@Delete(':id')
remove(@Param('id') id: string) {
return `This action removes a #${id} cat`;
}
Nestjs 状态码
在上面路由的例子中细心的人应该已经发现除了Post之外其他的状态码都是 200 \color{red}{200} 200,Post的确是 201 \color{red}{201} 201。
我们可以通过在处理程序层添加@HttpCode(...)装饰器来修改此行为:
@Post()
@HttpCode(200)
create() {
return 'This action adds a new cat';
}

Nestjs入门学习教程的更多相关文章
- MyBatis入门学习教程-使用MyBatis对表执行CRUD操作
上一篇MyBatis学习总结(一)--MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对use ...
- Linux入门学习教程:虚拟机体验之KVM篇
本文中可以学习到的命令: 1. aptitude 是apt-get 不会产生垃圾的版本 2. dpkg -L virtualbox 显示属于该包的文件 lsmod | grep kvmfi ...
- Nginx 入门学习教程
昨天听一个前同事说他们公司老大让他去研究下关于Nginx 方面的知识,我想了下Nginx 在如今的开发技术栈中应该会很大可能会用到,所以写篇博文记录总结下官网学习教程吧. 1. 什么是Nginx? 我 ...
- PHP 入门学习教程及进阶(源于知乎网友的智慧)
思过崖历程: 自学的动机.自学的技巧.自学的目标三个方面描述学习PHP的经历 一.自学的动机: 一定要有浓厚的兴趣,兴趣是最后的老师,可以在你迷茫的时候不断地支撑着你走下去. 自学不是为了工作,不是为 ...
- Julia 入门学习教程
有一门语言,它看起来像 Python ,感觉起来像 Lisp ,运行起来又像 C 一样快速,他就是Julia. 近年来,Julia 语言已然成为编程界的新宠,尤其在科学计算和人工智能领域炙手可热. 据 ...
- NodeJS入门学习教程
一.概念 1.什么是nodejs Node.js是JavaScript 运行时环境,通俗易懂的讲,Node.js是JavaScript的运行平台 Node.js既不是语言,也不是框架,它是一个平台 2 ...
- 屌丝逆袭--Asp.net快速入门学习教程 第1晚
本人屌丝一名,因工作原因,不能白天学习编程,所以只能做夜猫子学习编程,期待一天能逆袭成一名高帅富的技术大牛(靠,都想到流口水了........囧). 本教程记录本屌丝学习Asp.net的过程,大牛就飞 ...
- Python入门学习教程:数据库操作,连接MySql数据库
各位志同道合的同仁可以点击上方关注↑↑↑↑↑↑ 本教程致力于程序员快速掌握Python语言编程. 本文章内容是基于上次课程Python教程:Python教程:连接数据库,对数据进行增删改查操作 和py ...
- gulp入门学习教程(入门学习记录)
前言 最近在通过教学视频学习angularjs,其中有gulp的教学部分,对其的介绍为可以对文件进行合并,压缩,格式化,监听,测试,检查等操作时,看到前三种功能我的心理思想是,网上有很多在线压缩,在线 ...
随机推荐
- CMU数据库(15-445)Lab1-BufferPoolManager
0. 关于环境搭建请看 https://www.cnblogs.com/JayL-zxl/p/14307260.html 1. Task1 LRU REPLACEMENT POLICY 0. 任务描述 ...
- 学习Java第一天
public 保证类名和文件名一致 关键字字母全小写,编辑器中有颜色标记 null空常量不能打印 变量就是内存中的存储空间 计算机中最小的存储单元时字节(byte) //1字节(B) = 8位(bit ...
- Flink 中极其重要的 Time 与 Window 详细解析(深度好文,建议收藏)
前言 Flink 是流式的.实时的 计算引擎 上面一句话就有两个概念,一个是流式,一个是实时. 流式:就是数据源源不断的流进来,也就是数据没有边界,但是我们计算的时候必须在一个有边界的范围内进行,所以 ...
- COLMAP简易教程(命令行模式)
完整的 multi view stereo pipeline 会有以下步骤 structure from motion(SfM)==> camera parameters, sparse poi ...
- python 字典(formkey 建立 取值 赋值 删除 )
formkey快速建立空字典 result = {}.fromkeys(['name','age','job'],None) print(result) #往字典里添加元素 result. ...
- 通过封装openpyxl模块实现自己的Excel操作类
""" excel类封装需要提供以下功能: 1.选择表单功能 2.读取一个单元格的数据功能 3.读取一行数据功能 4.读取表单中所有数据功能 5.往单元格中写入数据功能 ...
- 使用Python对MySQL数据库插入二十万条数据
1.当我们测试的时候需要大量的数据的时候,往往需要我们自己造数据,一条一条的加是不现实的,这时候就需要使用脚本来批量生成数据了. import pymysql import random import ...
- 提供一个HDFS内的文件的路径,对该文件进行创建和删除操作。如果文件所在目录不存在,则自动创建目录。
1 import java.text.SimpleDateFormat; 2 3 import org.apache.hadoop.fs.FSDataOutputStream; 4 import or ...
- (转载)微软数据挖掘算法:Microsoft 神经网络分析算法(10)
前言 有段时间没有进行我们的微软数据挖掘算法系列了,最近手头有点忙,鉴于上一篇的神经网络分析算法原理篇后,本篇将是一个实操篇,当然前面我们总结了其它的微软一系列算法,为了方便大家阅读,我特地整理了一篇 ...
- file descriptor 0 1 2 一切皆文件 stdout stderr stdin /dev/null 沉默是金 pipes 禁止输出 屏蔽 stdout 和 stderr 输入输出重定向 重定向文件描述符
movie.mpeg.001 movie.mpeg.002 movie.mpeg.003 ... movie.mpeg.099 $cat movie.mpeg.0*>movie.mpeg ...