从0到1学习NestJs(一)
从 0 到 1 学习 NestJS (一) - 环境搭建与基础概念
前言
NestJS 是一个用于构建高效、可扩展的 Node.js 服务器端应用程序的框架。它使用了 TypeScript,并深受 Angular 的影响,提供了模块化、可测试和易维护的架构。本系列文章将从零开始,带你逐步了解 NestJS 的核心概念和开发实践。
本篇是第一部分,我们将专注于环境搭建和一些基础概念的理解。
环境准备
在开始之前,你需要确保你的机器上已经安装了以下工具:
- Node.js (>= 16.x): NestJS 需要 Node.js 环境。你可以从 https://nodejs.org 下载安装。
- npm (>= 7.x) 或 yarn: Node.js 包管理器。npm 通常会随 Node.js 一起安装,yarn 可以通过
npm install -g yarn安装。 - Code Editor: 推荐使用 VS Code,它对 TypeScript 和 NestJS 的支持很好。
安装 Nest CLI
Nest CLI 是 NestJS 的命令行工具,可以帮助我们快速创建项目、生成模块、组件等。
打开你的终端(或命令提示符),执行以下命令安装 Nest CLI:
1 | npm install -g @nestjs/cli |
安装完成后,可以通过 nest –version 或 nest -v 命令来验证是否安装成功。
创建 NestJS 项目
现在,我们可以使用 Nest CLI 创建一个全新的 NestJS 项目。在终端中,切换到你想要创建项目的目录,然后执行以下命令:
1 | nest new my-nestjs-project |
这里 my-nestjs-project 是你的项目名称,你可以根据自己的需要修改。
执行命令后,Nest CLI 会提示你选择包管理器 (npm 或 yarn),选择你喜欢的即可。然后,它会自动创建项目并安装依赖。
项目结构概览
创建完成后,进入项目目录:
1 | cd my-nestjs-project |
你会看到以下目录结构:
1 | my-nestjs-project/ |
src/ 目录: 这是你编写所有代码的地方。
main.ts: 程序的入口文件,负责启动 NestJS 应用。
app.module.ts: 根模块,用于组织和管理应用程序的组件。
app.controller.ts: 一个简单的控制器,用于处理 HTTP 请求。
app.service.ts: 一个简单的服务,用于处理业务逻辑。
test/ 目录: 用于存放测试文件。
nest-cli.json: Nest CLI 的配置文件,用于定义项目构建和代码生成规则。
package.json: npm 或 yarn 的配置文件,定义了项目依赖和脚本。
tsconfig.json: TypeScript 的配置文件,定义了 TypeScript 的编译规则。
运行项目
现在,我们可以运行项目,看看效果。在终端中,执行以下命令:
1 | npm run start:dev |
这个命令会启动开发服务器,并在 http://localhost:3000 上运行你的应用。打开浏览器,访问这个地址,你会看到 Hello World! 的字样。
基础概念
在继续深入之前,我们先了解几个 NestJS 的基础概念:
模块 (Module): 模块是 NestJS 应用的基本组织单元,用于封装和管理相关的控制器、服务和依赖。
控制器 (Controller): 控制器负责接收客户端的请求,并将请求路由到对应的处理程序。
服务 (Service): 服务负责处理应用程序的业务逻辑,通常与数据访问、业务规则等相关。
依赖注入 (Dependency Injection): NestJS 使用依赖注入模式来管理组件之间的依赖关系,提高代码的可测试性和可维护性。
装饰器 (Decorator): NestJS 大量使用了装饰器来标记类、方法和属性,用于实现依赖注入、路由映射等功能。
深入 src/ 目录
让我们打开 src/ 目录下的几个文件,看看它们的内容:
main.ts:
1 | import { NestFactory } from '@nestjs/core'; |
这段代码是应用程序的入口,它使用 NestFactory.create() 创建了一个 NestJS 应用实例,并启动了监听 3000 端口的服务器。
app.module.ts:
1 | import { Module } from '@nestjs/common'; |
@Module() 装饰器定义了一个模块,imports 数组用于引入其他模块,controllers 数组用于定义控制器,providers 数组用于定义服务。
app.controller.ts
1 | import { Controller, Get } from '@nestjs/common'; |
@Controller() 装饰器定义了一个控制器,@Get() 装饰器定义了一个处理 GET 请求的路由。
app.service.ts
1 | import { Injectable } from '@nestjs/common'; |
@Injectable() 装饰器定义了一个服务,这个服务提供了一个简单的 getHello() 方法
总结
在本篇文章中,我们完成了 NestJS 的环境搭建,创建了一个简单的项目,运行了开发服务器,并了解了 NestJS 的一些基础概念。在下一篇文章中,我们将深入学习模块、控制器和服务,并尝试构建更复杂的功能。
说明:
- 详细步骤: 文档包含了详细的步骤,从环境准备到项目运行。
- 代码示例: 提供了关键的代码示例,方便理解。
- 概念解释: 对 NestJS 的核心概念进行了简单解释。
- 项目结构: 对项目结构进行了详细的说明。
- 可读性: 使用了 Markdown 语法,使文档具有良好的可读性。