nestjs是一个基于Nodejs的平台框架,支持开箱即用Express/Fastify框架。有express基础的可以很快上手,没有基础的学习成本也很低。并且在框架结构上类似与SpringBoot框架,对于java后端开发人员可以快速上手,并且使用了TypeScript语言之后可以很好的进行类型检测。
文章内容来源链接:
NestJs中文文档
NestJs官方文档
先前条件: Node.js(版本 >= 16)
安装:https://docs.nestjs.cn/10/firststeps?id=%e5%85%88%e5%86%b3%e6%9d%a1%e4%bb%b6
项目创建
使用Nest CLI创建新项目:
npm i -g @nestjs/cli #安装脚手架
nest new project-name #创建项目 project-name为你的项目名称。
将会创建 project-name 目录, 安装 node_modules 和一些其他样板文件,并将创建一个 src 目录,目录中包含几个核心文件。
src
├── app.controller.spec.ts
├── app.controller.ts
├── app.module.ts
├── app.service.ts
└── main.ts
以下是这些核心文件的简要概述:
- app.controller.ts 带有单个路由的基本控制器示例。
- app.controller.spec.ts 对于基本控制器的单元测试样例 app.module.ts 应用程序的根模块。
- app.service.ts 带有单个方法的基本服务
- main.ts 应用程序入口文件。它使用 NestFactory 用来创建 Nest应用实例。
main.ts 包含一个异步函数,它负责引导我们的应用程序:
//main.js
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
async function bootstrap() {
//如果是第一次写建议使用NestFactory.create(AppModule, { abortOnError: false })) ①,项目代码报错时,会抛出异常,而不是直接结束程序。
const app = await NestFactory.create(AppModule);
await app.listen(3000);
}
bootstrap();
要创建一个 Nest 应用实例,我们使用了 NestFactory 核心类。NestFactory 暴露了一些静态方法用于创建应用实例。 create() 方法返回一个实现 INestApplication 接口的对象。该对象提供了一组可用的方法,我们会在后面的章节中对这些方法进行详细描述。 在上面的 main.ts 示例中,我们只是启动 HTTP 服务,让应用程序等待 HTTP 请求。
① 默认情况下,如果在创建应用程序时发生了任何错误,你的应用程序会退出并返回错误代码 1。如果你想让它抛出错误,请禁用 abortOnError 选项(例如,NestFactory.create(AppModule, { abortOnError: false }))。
平台
Nest 旨在成为一个与平台无关的框架。 由于平台无关性,我们以创建可重用的逻辑组件,开发人员可以跨越多种不同类型的应用程序来使用这些组件。 从技术上讲,创建了适配器以后,Nest 可以与任何 node.js 的 HTTP 框架一起工作。有两个支持开箱即用的 HTTP 平台:express 和 fastify。您可以选择最适合您需求的产品。
platform-express Express 是一个众所周知的 node.js 简约 Web 框架。 这是一个经过实战考验,适用于生产的库,拥有大量社区资源。 默认情况下使用 @nestjs/platform-express 包。 许多用户都可以使用 Express ,并且无需采取任何操作即可启用它。 |
---|
platform-fastify Fastify 是一个高性能,低开销的框架,专注于提供最高的效率和速度。 在这里阅读如何使用它。 |
无论使用哪种平台,它都会暴露自己的 API。 它们分别是 NestExpressApplication 和 NestFastifyApplication。
将类型传递给 NestFactory.create() 函数时,如下例所示,app 对象将具有专用于该特定平台的函数。 但是,请注意,除非您确实要访问底层平台 API,否则无需指定类型。
const app = await NestFactory.create<NestExpressApplication>(AppModule);
NestJS对于express路由模式的适配性更强大些,如果你子域路由的需求,建议使用express的模式,由于 Fastify 缺乏对嵌套路由器的支持,因此当使用子域路由时,应该改用(默认) Express 适配器(Express adapter)。其他待完善。
运行程序
在当前项目文件下,使用命令行执行以下命令进行启动应用程序。
npm run start
为了加快开发过程(构建速度快x20倍),您可以使用 SWC builder 请将 -b swc 标志传递给 start 脚本, 比如这样 npm run start – -b swc.
此命令启动 HTTP 服务监听定义在 src/main.ts 文件中定义的端口号。在应用程序运行后, 打开浏览器并访问 http://localhost:3000/。 你应该看到 Hello world! 信息。
要监听文件中的更改,您可以运行以下命令来启动应用程序:
npm run start:dev
此命令将监听您的文件,自动重新编译并重新加载服务器。
检查工具和格式化工具
CLI 提供一个可靠的大规模开发工作流框架。因此生成的 Nest 项目默认集成了代码检查工具和格式化工具(分别是 eslint 和 prettier)。
为了确保最大的稳定性和可扩展性,我们使用了 eslint 和 prettier 的基础工具包。这种预设从设计上允许与官方(指Eslint,Prettier)的扩展进行整洁的IDE集成。
对于不需要IDE的无头环境(如持续集成、Git钩子等),Nest项目自带了开箱即用的 npm 脚本。
# Lint and autofix with eslint
npm run lint
# Format with prettier
npm run format