使用 NestJS 构建高效且模块化的 Node.js 应用程序,从安装到第一个 API 端点:一步一步指南

一、安装 NestJS

要开始构建一个基于 NestJS 的应用,首先需要安装一系列依赖包。以下是必要的安装命令:

npm i --save @nestjs/core @nestjs/common rxjs reflect-metadata @nestjs/platform-express 
npm install -g ts-node
包名介绍
@nestjs/coreNestJS 框架的核心模块,提供构建、启动和管理 NestJS 应用程序的基础设施。
@nestjs/common包含构建 NestJS 应用的基础设施和常用装饰器、工具类、接口等,用于定义控制器、服务、中间件、守卫、拦截器、管道、异常过滤器等。
rxjs用于构建异步和事件驱动程序的库,基于可观察序列的概念,提供强大的功能来处理异步数据流。
reflect-metadata在 JavaScript 和 TypeScript 中实现元编程的库,通过提供元数据反射 API,允许在运行时检查和操作对象的元数据。
@nestjs/platform-expressNestJS 的平台适配器,用于将 NestJS 应用与 Express.js 集成,提供 Express.js 的中间件、路由等功能,并享受 NestJS 的模块化、依赖注入等高级特性。
ts-node使 Node.js 能直接运行 TypeScript 文件,无需额外编译步骤。

二、配置 TypeScript 编译选项

在项目的根目录下创建或更新 tsconfig.json 文件,以配置 TypeScript 编译选项:

{"compilerOptions": {"experimentalDecorators": true, // 启用装饰器特性"target": "ES2021", // 目标 JavaScript 版本"moduleResolution": "NodeNext", // 模块解析策略"module": "NodeNext" // 使用的模块系统}
}

三、创建应用程序入口文件 main.ts

在 src/ 目录下创建 main.ts 文件作为应用的入口点:

// 导入 NestFactory 模块,它用于创建 NestJS 应用程序的实例
import { NestFactory } from '@nestjs/core';
//导入跟模块
import { AppModule } from './app.module';// 创建一个异步函数,用于启动应用程序
async function bootstrap() {// 创建一个 NestJS 应用程序的实例const app = await NestFactory.create(AppModule);// 在底层使用 Express 框架// 启动应用程序,监听指定的端口await app.listen(3000);
}
bootstrap();

注释:此文件负责创建并启动 NestJS 应用实例。

四、定义应用模块 app.module.ts

接着,在 src/ 下创建 app.module.ts 来定义应用的主要模块:

import { AppController } from './app.controller';
import { Module } from '@nestjs/common';@Module({controllers: [AppController],
})
export class AppModule {}/*** @Moudle 是一个装饰器,用来定义模块,它接受一个对象作为参数,这个对象可以包含多个属性,这些属性定义了模块的配置信息。* 模块是组织代码的基本单元,它可以将相关的组件,(控制器、服务器、提供者)组合在一起,形成一个完整的系统。* Nest的模块系统是受Angular的模块系统启发而来的,它提供了一种灵活的方式来组织代码,使得代码更加模块化和可维护。*/

注释:模块是组织代码的基本单元,将相关组件组合在一起,构成可维护的应用结构。

五、构建控制器 app.controller.ts

最后,在 src/ 下创建 app.controller.ts 以实现 HTTP 请求处理器:

import { Controller, Get } from '@nestjs/common';@Controller('a') // 设置基础路径为 /a
export class AppController {@Get('b') // 结合基础路径,实际访问路径为 /a/bgetHello(): string {return 'Hello World!';}
}/*** @Controller 是一个装饰器,用于定义一个控制器类,该类将处理应用程序中的请求。* 控制器是处理传入 HTTP 请求的核心组件,每个控制器负责处理特定的请求路径和对应的 HTTP 方法。* 在控制器的内部会使用路由装饰器,如 @Get()、@Post()、@Put()、@Delete() 等,来定义具体的路由和对应的处理函数。* * @Get 是一个路由装饰器,用于将控制器的方法 getHello 映射到 HTTP GET 请求上。* 当用户访问 /a/b 路径时,将会调用 getHello 方法,并返回 'Hello World!' 字符串。* 通过 @Get 装饰器,可以指定该方法处理特定路径上的 GET 请求。*/

六、添加启动命令

为了让开发者能够方便地启动 NestJS 应用程序,可以在 package.json文件中的scripts 部分添加一个自定义脚本,用于简化启动过程。请将以下代码添加到 package.json 中:

"scripts": {"dev": "ts-node src/main.ts",// 其他脚本...
}

七、启动 NestJS 服务

现在你可以通过执行以下命令来启动你的 NestJS 应用程序:

npm run dev

注释:这将触发 package.json 中定义的 "dev" 脚本,进而启动应用程序。

7.1访问应用

一旦服务器成功启动,并且没有出现任何错误信息,你就可以在浏览器中访问应用程序了。根据你在控制器中设置的基础路径/a 和路由装饰器@Get('b'),你应该可以通过访问下面的 URL来测试你的第一个NestJS API 端点:

http://localhost:3000/a/b

在这里插入图片描述
注释:当你访问上述地址时,应该会看到返回的 'Hello World!' 字符串,这表示你的 NestJS 应用程序正在正确运行,并且可以处理 HTTP 请求。

八、提示

  • 如果遇到端口占用问题,请检查是否有其他进程正在使用端口 3000,或者修改 main.ts 文件中的监听端口。
  • 在开发环境中,考虑使用诸如 nodemon 或 concurrently 这样的工具来自动重启服务器,当源文件发生变化时,这能极大地提高开发效率。例如,可以安装 nodemon 并更新 package.json 的 dev 脚本如下:
"scripts": {"dev": "nodemon --exec ts-node src/main.ts"
}

注释:这样做之后,每次保存更改,NestJS 应用将会自动重启,从而即时反映代码的变化。

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

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

相关文章

鸿蒙面试 2025-01-09

鸿蒙分布式理念?(个人认为理解就好) 鸿蒙操作系统的分布式理念主要体现在其独特的“流转”能力和相关的分布式操作上。在鸿蒙系统中,“流转”是指涉多端的分布式操作,它打破了设备之间的界限,实现了多设备…

Mysql--基础篇--SQL(DDL,DML,窗口函数,CET,视图,存储过程,触发器等)

SQL(Structured Query Language,结构化查询语言)是用于管理和操作关系型数据库的标准语言。它允许用户定义、查询、更新和管理数据库中的数据。SQL是一种声明性语言,用户只需要指定想要执行的操作,而不需要详细说明如何…

SQL 幂运算 — POW() and POWER()函数用法详解

POW() and POWER()函数用法详解 POW() 和 POWER() —计算幂运算(即一个数的指定次方)的函数。 这两个函数是等价的,功能完全相同,只是名字不同。 POW(base, exponent); POWER(base, exponent); base:底数。exponen…

Elasticsearch:聚合操作

这里写目录标题 一、聚合的概述二、聚合的分类1、指标聚合(Metric Aggregation)2、桶聚合(Bucket Aggregation)3、管道聚合(Pipeline Aggregation) 三、ES聚合分析不精准原因分析四、聚合性能优化1、ES聚合…

Ubuntu 磁盘修复

Ubuntu 磁盘修复 在 ubuntu 文件系统变成只读模式,该处理呢? 文件系统内部的错误,如索引错误、元数据损坏等,也可能导致系统进入只读状态。磁盘坏道或硬件故障也可能引发文件系统只读的问题。/etc/fstab配置错误,可能…

重新整理机器学习和神经网络框架

本篇重新梳理了人工智能(AI)、机器学习(ML)、神经网络(NN)和深度学习(DL)之间存在一定的包含关系,以下是它们的关系及各自内容,以及人工智能领域中深度学习分支对比整理。…

LabVIEW瞬变电磁接收系统

利用LabVIEW软件与USB4432采集卡开发瞬变电磁接收系统。系统通过改进硬件配置与软件编程,解决了传统仪器在信噪比低和抗干扰能力差的问题,实现了高精度的数据采集和处理,特别适用于地质勘探等领域。 ​ 项目背景: 瞬变电磁法是探…

Redis 优化秒杀(异步秒杀)

目录 为什么需要异步秒杀 异步优化的核心逻辑是什么? 阻塞队列的特点是什么? Lua脚本在这里的作用是什么? 异步调用创建订单的具体逻辑是什么? 为什么要用代理对象proxy调用createVoucherOrder方法? 对于代码的详细…

C++笔记之`size_t`辨析

C++笔记之size_t辨析 code review! 文章目录 C++笔记之`size_t`辨析一.什么是 `size_t`?二.`size_t` 的来源和设计目的三.`size_t` 的应用场景四.`size_t` 的优点五.`size_t` 的缺点和注意事项六.`size_t` 和其他类型的比较七.总结与建议在 C/C++ 中,size_t 是一个非常重要的…

MySQL表的增删查改(下)——Update(更新),Delete(删除)

文章目录 Update将孙悟空同学的数学成绩修改为80分将曹孟德同学的数学成绩变更为 60 分,语文成绩变更为 70 分将总成绩倒数前三的 3 位同学的数学成绩加上 30 分将所有同学的语文成绩更新为原来的 2 倍 Delete删除数据删除孙悟空同学的考试成绩删除整张表数据 截断表…

大语言模型训练的数据集从哪里来?

继续上篇文章的内容说说大语言模型预训练的数据集从哪里来以及为什么互联网上的数据已经被耗尽这个说法并不专业,再谈谈大语言模型预训练数据集的优化思路。 1. GPT2使用的数据集是WebText,该数据集大概40GB,由OpenAI创建,主要内…

【hadoop学习遇见的小问题】clone克隆完之后网络连接不上问题解决

vi /etc/udev/rules.d/70-persistent-net.rules注释掉第一行 第二行的eth1 改为eth0 由上图也可以看到物理地址 记录下来在网卡中修改物理地址 vi /etc/sysconfig/network-scripts/ifcfg-eth0修改完之后 重启reboot 即可

PDFMathTranslate: Star13.8k,一款基于AI的PDF文档全文双语翻译PDF文档全文双语翻译,保留格式神器,你应该需要它

嗨,大家好,我是小华同学,关注我们获得“最新、最全、最优质”开源项目和高效工作学习方法 PDFMathTranslate是一个开源项目,旨在为用户提供便捷的PDF科学论文翻译解决方案。它不仅能够翻译文本,还能保留公式、图表、目…

对话|全年HUD前装将超330万台,疆程技术瞄准人机交互“第一屏”

2024年,在高阶智驾进入快速上车的同时,座舱人机交互也在迎来新的增长点。Chat GPT、AR-HUD、车载投影等新配置都在带来新增量机会。 高工智能汽车研究院监测数据显示,2024年1-10月,中国市场(不含进出口)乘用…

【机器学习案列】学生抑郁可视化及预测分析

🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…

微服务保护——Sentinel

什么是微服务保护? 微服务保护是一系列用于保障微服务架构稳定、可靠运行的策略与技术手段,在复杂的分布式微服务系统里,它能避免局部故障引发连锁反应,从而维持整个系统的可用性,主要涵盖以下几个关键部分&#xff1a…

福建双色荷花提取颜色

提取指定颜色 HSV双色荷花代码验证 参照《OpenCV图像处理技术》 HSV 要用HSV的色调、饱和度和亮度来提取指定颜色。 双色荷花 农林大学金山校区观音湖 代码 import cv2 import numpy as npimgcv2.imread("./sucai6/hua.jpg") cv2.imshow("SRC",img) h…

tdengine数据库使用java连接

1 首先给你的项目添加依赖 <dependency> <groupId>com.taosdata.jdbc</groupId> <artifactId>taos-jdbcdriver</artifactId> <version>3.4.0</version> <!-- 表示依赖不会传递 --> </dependency> 注意&am…

MIUI显示/隐藏5G开关的方法,信号弱时开启手机Wifi通话方法

5G网速虽快&#xff0c;手机功耗也大。 1.取消MIUI强制的5G&#xff0c;手动设置4G的方法&#xff01; 【小米澎湃OS, Xiaomi HyperOS显示/隐藏5G开关的方法】 1.1.小米MIUI系统升级后&#xff0c;被强制连5G&#xff0c;手动设置开关被隐藏&#xff0c;如下图&#xff1a; 1…

pikachu - Cross-Site Scripting(XSS)

pikachu - Cross-Site Scripting&#xff08;XSS&#xff09; 声明&#xff01; 笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人无关&#xff0c;切勿触碰法律底线&#xff0c;否则后果自负&#x…