NestJS:基础掌握 从了解到使用(上)

简介: NestJS:基础掌握 从了解到使用(上)

一、官网

一定要认真学习官网内容!

NestJS 简介 | NestJS 中文文档 | NestJS 中文网

NestJS - A progressive Node.js framework

二、理解NestJS(内容来自官网)

2.1、理解NestJS

Nest (NestJS) 是一个用于构建高效、可扩展的 Node.js 服务器端应用程序的开发框架。它利用 JavaScript 的渐进增强的能力,使用并完全支持 TypeScript (仍然允许开发者使用纯 JavaScript 进行开发),并结合了 OOP (面向对象编程)、FP (函数式编程)和 FRP (函数响应式编程)。

在底层,Nest 构建在强大的 HTTP 服务器框架上,例如 Express (默认),并且还可以通过配置从而使用 Fastify

Nest 在这些常见的 Node.js 框架 (Express/Fastify) 之上提高了一个抽象级别,但仍然向开发者直接暴露了底层框架的 API。这使得开发者可以自由地使用适用于底层平台的无数的第三方模块。

2.2、NestJS哲学

近年来,由于 Node.js、JavaScript 已经成为 web 前端和后端应用程序的“通用开发语言”。这促成了诸如 AngularReactVue 等优秀项目的出现,他们提高了开发者的工作效率,并能够创建快速、可测试和可扩展的前端应用程序。然而,尽管 Node (和服务器端 JavaScript)拥有大量优秀的软件库、辅助程序和工具,但没有一个能够有效地解决我们所面对的主要问题,即 架构。这样也是本人很长时间以来期望的。

Nest 提供了一个开箱即用的应用程序体系结构,允许开发者及其团队创建高度可测试、可扩展、松散耦合且易于维护的应用程序。这种架构深受 Angular 的启发。

2.3、NestJS能力

1、后端开发。

2、其他。

node.js可以做什么 • Worktile社区

2.4、NestJS对比Egg.js:

eggjs 停止更新 - OSCHINA - 中文开源技术交流社区

NestJS和Egg.js的区别以及对比

egg.js和nest.js的对比_程序员 小明的博客-CSDN博客_nestjs和eggjs哪个好

三、安装、启动NestJS项目

NestJS 简介 | NestJS 中文文档 | NestJS 中文网

3.1、创建一个新的项目目录,并使用核心的 Nest 文件和支撑模块填充该目录,从而为项目创建一个传统的基本结构。建议初学者使用 Nest CLI 创建新项目。

npm i -g @nestjs/cli
cnpm i -g @nestjs/cli // 如速度慢可使用cnpm
nest new project-name

3.2、启动项目

pnpm run start

启动成功

3.3、从src/main.ts文件,我们看到项目监听的是3000端口

我们访问本地项目 http://localhost:3000/

访问成功

四、NestJS项目目录介绍

引用自技术胖-NestJS 快速入门教程

+-- dist[目录]                      // 编译后的目录,用于预览项目
+-- node_modules[目录]              // 项目使用的包目录,开发使用和上线使用的都在里边
+-- src[目录]                       // 源文件/代码,程序员主要编写的目录
|  +-- app.controller.spec.ts      // 对于基本控制器的单元测试样例
|  +-- app.controller.ts           // 控制器文件,可以简单理解为路由文件
|  +-- app.module.ts               // 模块文件,在NestJS世界里主要操作的就是模块
|  +-- app.service.ts              // 服务文件,提供的服务文件,业务逻辑编写在这里
|  +-- app.main.ts                 // 项目的入口文件,里边包括项目的主模块和监听端口号
+-- test[目录]                      // 测试文件目录,对项目测试时使用的目录,比如单元测试...
|  +-- app.e2e-spec.ts             // e2e测试,端对端测试文件,测试流程和功能使用
|  +-- jest-e2e.json               // jest测试文件,jset是一款简介的JavaScript测试框架
+-- .eslintrc.js                   // ESlint的配置文件
+-- .gitignore                     // git的配置文件,用于控制哪些文件不受Git管理
+-- .prettierrc                    // prettier配置文件,用于美化/格式化代码的
+-- nest-cli.json                  // 整个项目的配置文件,这个需要根据项目进行不同的配置
+-- package-lock.json              // 防止由于包不同,导致项目无法启动的配置文件,固定包版本
+-- package.json                   // 项目依赖包管理文件和Script文件,比如如何启动项目的命令
+-- README.md                      // 对项目的描述文件,markdown语法
+-- tsconfig.build.json            // TypeScript语法构建时的配置文件
+-- tsconfig.json                  // TypeScript的配置文件,控制TypeScript编译器的一些行为

五、Controller控制器-路由的创建

5.1、创建请求地址

创建 http://localhost:3000/name 的请求地址(接口地址)

src/service.ts

// 服务文件,提供的服务文件,业务逻辑编写在这里
import { Injectable } from '@nestjs/common';
@Injectable()
export class AppService {
  getHello(): string {
    return 'Hello World Snow!';
  }
  getName(): string {
    return 'SNOW!';
  }
}

src/controller.ts

// 控制器--编写路由
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';
@Controller('api') // 添加顶层路径 api
export class AppController {
  constructor(private readonly appService: AppService) {}
  @Get()
  getHello(): string {
    return this.appService.getHello();
  }
  @Get('name')
  getName(): string {
    return this.appService.getName();
  }
}

访问成功。

5.2、添加顶层路径 api

访问成功 api/name

5.3、src下创建product模块

5.3.1、删除以下文件

5.3.2、app.module.ts删除对应的使用

5.3.3、新建module

nest g module products

5.3.4、创建controller

nest g controller products --no-spec

src/products/products.controller.ts

import { Controller, Get } from '@nestjs/common';
@Controller('products')
export class ProductsController {
    @Get()
    getProductsList(): any{
        return {
            code: 0,
            data: ['huawei', 'changcheng', 'biyadi'],
            msg: '请求产品列表成功'
        }
    }
}

5.4、src/main.ts 设置默认前缀 api/

app.setGlobalPrefix('api/')

六、Controller控制器-使用products.service.ts写业务逻辑

6.1、把业务逻辑放在products.service.ts这个文件中。nestjs规范。

nest g service products --no-spec

6.2、src/products/products.controller.ts 引入 service

import { ProductsService } from './products.service';
import { Controller, Get } from '@nestjs/common';
import { ProductsService } from './products.service';
@Controller('products')
export class ProductsController {
    // this.productsService = new ProductsService() 等价于 constructor 方式
    constructor(private productsService: ProductsService){}
    @Get()
    getProductsList(): any{
        return this.productsService.getProductsList()
    }
}

6.3、src/products/products.service.ts

import { Injectable } from '@nestjs/common';
@Injectable()
export class ProductsService {
    getProductsList(){
        return {
            code: 0,
            data: ['huawei', 'changcheng', 'biyadi'],
            msg: '请求产品列表成功'
        }
    }
}

相关文章
|
11月前
|
JSON 关系型数据库 MySQL
NestJS:基础掌握 从了解到使用(下)
NestJS:基础掌握 从了解到使用(下)
207 0
|
前端开发
小满nestjs(第十章 nestjs 提供者)
如果服务 之间有相互的依赖 或者逻辑处理 可以使用 useFactory
138 0
小满nestjs(第十章 nestjs 提供者)
|
8月前
|
开发框架 JavaScript 前端开发
nestjs的学习(一)
nestjs的学习(一)
50 0
|
10月前
|
JavaScript 前端开发
[Nestjs] 使用ncc加快启动速度
通过使用 ncc 可以将 NestJS 应用程序打包成一个单独的可执行文件,这可以加快应用程序的启动速度。下面是使用 ncc 加快 NestJS 应用程序启动速度的步骤:
197 0
|
10月前
|
资源调度 API
[Nestjs] 集成 Swagger
安装 Swagger 模块:首先,使用 npm 或者 yarn 安装 @nestjs/swagger 模块。
|
中间件
小满nestjs(第十二章 nestjs 中间件)
中间件是在路由处理程序 之前 调用的函数。 中间件函数可以访问请求和响应对象
188 0
小满nestjs(第十二章 nestjs 中间件)
|
开发框架 JavaScript 前端开发
NestJS系列(1):初识 NestJS 和 Hello,world
本文介绍了使用 @nest/cli 脚手架快速创建和启动一个 Nest 应用,随后又对“Hello, World”示例代码做了分析,简单介绍了一些 TypeSscript 语法,比如装饰器,和一些 Nest 的概念。相信看到这里,大家基本上了解了 Nest 应用接收到用户请求后,走了哪些流程,完成了响应。
34151 1
|
JavaScript
小满nestjs(第五章 nestjs cli)
通过 NestFactory.create(AppModule) 创建一个app 就是类似于绑定一个根组件App.vue
146 0
小满nestjs(第五章 nestjs cli)
小满nestjs(第十一章 nestjs 模块)
每个 Nest 应用程序至少有一个模块,即根模块。根模块是 Nest 开始安排应用程序树的地方。事实上,根模块可能是应用程序中唯一的模块,特别是当应用程序很小时,但是对于大型程序来说这是没有意义的。在大多数情况下,您将拥有多个模块,每个模块都有一组紧密相关的功能
99 0
小满nestjs(第十一章 nestjs 模块)
|
前端开发 测试技术 API
小满nestjs(第八章 nestjs 控制器)
小满nestjs(第八章 nestjs 控制器)
160 0
小满nestjs(第八章 nestjs 控制器)