NestJS入门手册:零基础开发第一个 HTTP 接口

前言

NestJS 是一个用于开发高效、可扩展的 Node.js 服务器端应用程序的框架。其优雅的 TypeScript 支持和深度集成的系统模块,使得开发复杂的后端服务变得前所未有的简单。在这篇文章中,我们将介绍 NestJS 的基础知识,帮助你快速入门。

准备工作

以下准备工作是 nestjs 运行的基础环境,如果你已经学习或了解了nodejs相关的知识以及开发设备已经成功安装了Node环境和开发IDE,请忽略这部分内容。

  • 安装 NodeJS
  • 安装 pnpm(可选项)
  • 安装 VsCode 编辑器

开始入门

一、安装 nestjs 脚手架

npm install -g @nestjs/cli

或者

pnpm install -g @nestjs/cli

二、创建第一个 nestjs 服务项目

nest new your-custom-project-name

Untitled.png
在这里插入图片描述

三、通过 VsCode 打开创建的项目

npm run start

Untitled.png

Untitled.png

四、访问第一个HTTP接口

浏览器访问 http://localhost:3000

Untitled.png

项目文件分析

nestjs 脚手架生成的最基础的项目包含如下文件列表

├── package.json
├── pnpm-lock.yaml
├── src
│   ├── app.controller.spec.ts
│   ├── app.controller.ts
│   ├── app.module.ts
│   ├── app.service.ts
│   └── main.ts
├── test
│   ├── app.e2e-spec.ts
│   └── jest-e2e.json
├── tsconfig.build.json
└── tsconfig.json

文件介绍:

  • package.json 项目核心配置文件,主要包含项目基础信息,项目依赖等。
  • src/main.ts 服务运行入口文件,定义了nest服务加载流程。
  • src/module.ts nest服务依赖的核心模块,其中定义了 imports,controllersprovidersexports等。
  • src/controller.ts 提供HTTP接口、微服务等对外的方法集合;
  • src/service.ts 提供运行时公共方法,相对于静态的utils方法,service实例可以注入其他的provider服务。
  • 其他文件都是 「单元测试」相关的文件,有没有都不会影响整个服务启动运行的,暂xiug 时按下不表。

编写第一个HTTP接口

⛱️ 当我们尝试新鲜事物时,给自己制定一些简单容易实现的目标然后实现它,通过成就感不断的刺激,才会让我们能够坚持深入使用并掌握它。

目标一

  1. 实现如下HTTP接口

    URL/api/user
    MethodGET
    Request{“name”:”levenx”}
    Response{“code”:0,“message”:”ok”,“data”:{“name”:”levenx”}}

    接口要求分析,前端通过/api/user接口的query参数携带name参数,接口按照要求格式返回即可。

  2. 修改app.controllers.ts文件代码内容

    import { Controller, Get, Query } from '@nestjs/common';
    import { AppService } from './app.service';
    
    @Controller()
    export class AppController {
    
      @Get('/api/user')
      getUserName(@Query() query) {
        return {
          code: 0,
          message: 'ok',
          data: {
            name: query.name,
          },
        };
      }
    }
    

    分析:

    1. nestjs 通过在方法上添加@Get注解定义接口,注解方法的参数(/api/user)就是需要定义的接口路径。
    2. nestjs 提供了很多注解让开发者获取自己想要的信息,比如通过@Query获取GET请求的query参数。
    3. 方法return返回的内容就是HTTP返回的相应体内容。
  3. 在浏览器中访问 http://localhost:3000/api/user?name=levenx,看看返回是否符合预期。

    Untitled.png

目标二

  1. 实现公共的service方法给多个HTTP接口使用,service方法的作用是在用户name前面加上 hi!

  2. 修改app.service.ts文件内容

    import { Injectable } from '@nestjs/common';
    
    @Injectable()
    export class AppService {
      setHi(name: string): string {
        return `hi! ${name}`;
      }
    }
    
  3. 在app.controller.ts 中使用service方法

    import { Controller, Get, Query } from '@nestjs/common';
    import { AppService } from './app.service';
    
    @Controller()
    export class AppController {
    ++  constructor(private readonly appService: AppService) {}
    
      @Get('/api/user')
      getUserName(@Query() query) {
        return {
          code: 0,
          message: 'ok',
          data: {
    ++        name: this.appService.setHi(query.name),
          },
        };
      }
    }
    

    代码分析:

    1. 首先需要在Controller的构造方法中添加appService方法,这一步让整个AppController中所有的方法都能够调用appService的方法;
    2. 在需要使用service方法的地方调用即可。
  4. 在浏览器中访问 http://localhost:3000/api/user?name=levenx

    Untitled.png

总结

Nestjs 是一个非常强大的 Node 框架,它支持了很多能力丰富后端项目工程,本篇教程只是对Nestjs的浅尝辄止,后续我们继续深入Nestjs的更多方面。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何实现分布式调用跟踪?

分布式服务拆分以后,系统变得日趋复杂,业务的调用链也越来越长,如何快速定位线上故障,就需要依赖分布式调用跟踪技术。下面我们一起来看下分布式调用链相关的实现。 为什么需要分布式调用跟踪 随着分布式服务架构的流行&#xf…

软件测试基础知识总结

软件测试的IEEE定义:使用人工或自动的手段来运行或测量软件系统的过程,目的是检验软件系统是否满足规定的需求,并找出与预期结果之间的差异。 软件测试的发展趋势: ① 测试工作将进一步前移。软件测试不仅仅是单元测试、集成测…

【消息中间件】Rabbitmq的基本要素、生产和消费、发布和订阅

原文作者:我辈李想 版权声明:文章原创,转载时请务必加上原文超链接、作者信息和本声明。 文章目录 前言一、消息队列的基本要素1.队列:queue2.交换机:exchange3.事件:routing_key4.任务:task 二、生产消费模式1.安装pika2.模拟生产者进程3.模…

虚拟机Linux(Centos7)安装Docker

如果没有安装虚拟机的,可以参考这篇VMware虚拟机安装Linux操作系统(CentOS7) 文章目录 0.安装Docker1.CentOS安装Docker1.1.卸载(可选)如何看自己的虚拟机上是否安装过docker? 1.2.安装docker1.3.启动docke…

【观测宇宙】

这个网站一眼看清整个宇宙。可观测范围一亿光年。 Cocosmos | 掌上宇宙 作者开发介绍:Cocosmos 序章 | 掌中宇宙,浩瀚星海,一眼万年 (qq.com)

Cell Systems | 深度学习开启蛋白质设计新时代

今天为大家介绍的是来自Bruno Correia团队的一篇综述。深度学习领域的迅速进步对蛋白质设计产生了显著影响。最近,深度学习方法在蛋白质结构预测方面取得了重大突破,使我们能够得到数百万种蛋白质的高质量模型。结合用于生成建模和序列分析的新型架构&am…

【深度强化学习】TRPO、PPO

策略梯度的缺点 步长难以确定,一旦步长选的不好,就导致恶性循环 步长不合适 → 策略变差 → 采集的数据变差 → (回报 / 梯度导致的)步长不合适 步长不合适 \to 策略变差 \to 采集的数据变差 \to (回报/梯度导致的&am…

RabbitMQ 消息持久化

默认情况下,exchange、queue、message 等数据都是存储在内存中的,这意味着如果 RabbitMQ 重启、关闭、宕机时所有的信息都将丢失。 RabbitMQ 提供了持久化来解决这个问题,持久化后,如果 RabbitMQ 发送 重启、关闭、宕机&#xff…

信息安全和网络安全的区别

信息安全与网络安全都属于安全领域,但它们的范围和重点不同。 信息安全主要关注数据的保护,包括对敏感数据进行加密、防止数据丢失或泄露等措施。信息安全通常与数据存储、传输和处理相关。 而网络安全更侧重于保护计算机系统和网络免受攻击、病毒、蠕…

C++类与对象 (上)

目录 前言: 类和对象的理解 类的引入 类的定义与使用方式 访问限定符 类的两种定义方式 成员变量的命名规则 类的作用域 类的实例化 类对象模型 计算类对象的大小 类对象的存储方式 this指针 前言: C语言是面向过程的,关注的是过…

我想开发一款跨平台桌面软件,请告诉我qt、electron、tauri、pyqt、flutter分别适合开发哪些跨平台桌面

不同的跨平台桌面开发工具适用于不同的应用场景和开发者需求。以下是关于 Qt、Electron、Tauri、PyQt、Flutter 的简要说明,以帮助你更好地选择适合你项目的工具: Qt: 适用场景: Qt 是一个强大的 C 框架,适用于开发需要高性能和原…

【LeetCode】数组精选17题——双指针、滑动窗口、前缀和

目录 快慢指针: 1. 移动零(简单) 2. 复写零(简单) 对撞指针: 1. 两数之和 II - 输入有序数组(中等) 2. 三数之和(中等) 3. 有效三角形的个数&#xff…

python语言中“缩进”说法,python中的缩进规则

本篇文章给大家谈谈python语言中“缩进”说法,以及python中的缩进规则,希望对各位有所帮助,不要忘了收藏本站喔。 缩进是Python的灵魂 Python是一门独特的语言,它的代码块是通过缩进(Indentation)来标记的&…

QT自带打包问题:无法定位程序输入点?metaobject@qsound

文章目录 无法定位程序输入点?metaobjectqsound……检查系统环境变量的配置:打包无须安装qt的文件 无法定位程序输入点?metaobjectqsound…… 在执行release打包程序后,相应的release文件夹下的exe文件,无法打开 如有错误欢迎指出 检查系…

LCR 181. 字符串中的单词反转

解题思路: class Solution {public String reverseMessage(String message) {message message.trim(); // 删除首尾空格int j message.length() - 1, i j;StringBuilder res new StringBuilder();while (i > 0) {while (i >…

如何批量获取CSDN文章数据并进行持久化

自己去看文章数据的话,比较慢,所以一直想通过程序来批量获取CSDN的文章数据,最近研究了一下,发现还是挺简单的,能够直接通过解析json来获取文章数据,跟大家分享一下。 文章目录 一、步骤1、首先我们到自己的…

JavaScript数组分组groupBy

JavaScript 最近发布了一个方法 Object.groupBy,可以对可迭代对象中的元素进行分组。 语法: Object.groupBy(items, callbackFn)items 被分组的可迭代对象,如 Array。 callbackFn 对可迭代对象中的每个元素执行的函数。 举个例子&#…

结构型设计模式(一):门面模式 组合模式

门面模式 Facade 1、什么是门面模式 门面模式(Facade Pattern)是一种结构型设计模式,旨在为系统提供一个统一的接口,以便于访问子系统中的一群接口。它通过定义一个高层接口,简化了客户端与子系统之间的交互&#xf…

基于Java SSM框架实现图书店仓库进销存管理系统项目【项目源码+论文说明】

基于java的SSM框架实现图书店仓库进销存管理系统演示 摘要 仓库作为储存货物的核心功能之一,在整个仓储中具有非常重要的作用,是社会物质生产的必要条件。良好的仓库布局环境能够对货物进入下一个环节前的质量起保证作用,能够为货物进入市场…