nestjs入门实战(一):CLI创建项目

前言

本章节主要简单介绍通过nestjs CLI 快速创建 nestjs 项目和 API 接口模块,再通过 postman 请求接口。由 demo 引入 nestjs 核心 Module 概念,让同学们更好入手 nestjs 应用

demo 效果(postman 请求自定义的接口)

环境

需要需要本地支持node环境运行,具体下载node环境请点击

1. 创建nestjs项目

首先全局安装 @nestjs/cli并创建项目hello-nestjs

shell 复制代码
  npm i -g @nestjs/cli
  nest new hello-nestjs

创建过程中安装方式可选默认npm回车即可,安装成功后切换到项目目录并运行npm指令启动项目:

shell 复制代码
  cd hello-nestjs
  npm run start:dev

启动成功后方式初始接口,使用postman get 请求 localhost:3000,将返回Hello World!

2. 目录代码解读

通过nestjs Cli 创建的项目目录:

css 复制代码
hello-nestjs/
├── src/
│   ├── app.controller.ts  
│   ├── app.controller.spec.ts
│   ├── app.module.ts 
│   ├── app.service.ts
│   └── main.ts // 启动入口文件
├── test/
├── node_modules/
├── .eslintrc.js
├── .prettierrc
├── nest-cli.json
├── package.json
├── tsconfig.build.json
└── tsconfig.json

这里我们介绍主要的文件,其中入口文件main.ts

ts 复制代码
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(3000);
}
bootstrap();

这是应用程序的入口文件。它使用 NestFactory 来创建一个 Nest 应用实例,并监听指定的端口(这里是 3000)

项目根模块 app.module.ts

ts 复制代码
// app.module.ts

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';

@Module({
  imports: [],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

所有后续开发添加的模块都需要imports根模块所引用,类似于如图:

基本控制器AppController,控制器处理传入的 HTTP 请求,并返回响应。这里定义了一个 GET 请求的处理器 getHello

ts 复制代码
// AppController
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';

@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {}

  @Get()
  getHello(): string {
    return this.appService.getHello();
  }
}

基础服务 AppService,它包含了业务逻辑,一般服务于控制层,这里的 getHello 方法返回一个简单的字符串。

ts 复制代码
// app.service.ts

import { Injectable } from '@nestjs/common';

@Injectable()
export class AppService {
  getHello(): string {
    return 'Hello World!';
  }
}

3. 自定义个Module

通过上述主要文件功能介绍,同学们应该有一定了解文件功能了,接下来创建命名个cat模块,这里通过nest cli脚手架快速创建该模块

shell 复制代码
 nest g mo cat # 创建模块
 nest g co cat --no-spec # 创建controller层
 nest g s cat --no-spec # 创建service服务层

其中 cat 为模块名称, --no-spec 为不创建单元测试文件,有兴趣的同学可以点击了解(cli 文档)

这时在src目录下会新增个cat目录,该目录包括如下文件:

1.cat.module模块入口

2.cat.controllerapi 接口控制层

3.cat.service基础服务处

nest cli会自动把新生成的CatModule模块imports注册到根模块

diff 复制代码
// app.module.ts

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
+ import { CatModule } from './cat/cat.module';

@Module({
  imports: [
+   CatModule 
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

接下来在控制层CatController 创建个get方式的接口

ts 复制代码
// cat.controller

import { Controller, Get } from '@nestjs/common';

@Controller('cat')
export class CatController {
    @Get()
    create(): string {
        return 'This action adds a new cat'
    }
}

通过postman访问localhost:3000/cat 请求方式为:GET,将返回字符串:This action adds a new cat

日常开发中 controller请求后的业务逻辑处理和具体返回会在service层中处理,所以cat.controller中引入 cat.service基础层,由cat.service具体返回值

diff 复制代码
// cat.controller

import { Controller, Get } from '@nestjs/common';
+ import { CatService } from './cat.service';

@Controller('cat')
export class CatController {
    // 构造时注入 CatService
+   constructor(private readonly catService: CatService) { }

    @Get()
    create(): string {
-        return 'This action adds a new cat'
+        return this.catService.createCat()
    }
}
ts 复制代码
// cat.service.ts

import { Injectable } from '@nestjs/common';

@Injectable()
export class CatService {
    createCat(): string {
        return 'This action adds a new cat(form CatService)'
    }
}

再次访问localhost:3000/cat 将返回字符串:This action adds a new cat(form CatService)

总结

本章节主要介绍简单出创建nest项目和自定义模块接口,nest应用是从 App.module根模块为基础,后续新增模块都需要再 App.moduleimports,而每个模块内部有:module(模块层),controller(控制层) service(基础服务处)

相关推荐
左手厨刀右手茼蒿7 小时前
Flutter 组件 http_requests 适配鸿蒙 HarmonyOS 实战:极简网络请求,构建边缘端轻量级 RESTful 通讯架构
网络·flutter·http
WIN-U610 小时前
新版华三H3C交换机配置NTP时钟步骤 示例(命令及WEB配置)
网络协议·tcp/ip·http
带娃的IT创业者13 小时前
AI 时代产品经理能取代程序员吗?一人全栈背后的残酷真相
人工智能·ai·程序员·产品经理·全栈·职业焦虑
踩着两条虫14 小时前
VTJ.PRO 在线应用开发平台的后端模块系统
后端·架构·nestjs
nbsaas-boot14 小时前
基于 HTTP 构建 MCP Tools 的完整工程解析
网络·网络协议·http·ai
踩着两条虫14 小时前
VTJ.PRO 在线应用开发平台的业务模块(应用、DSL、模板、订单、智能体、技能)
后端·agent·nestjs
踩着两条虫14 小时前
VTJ.PRO 在线应用开发平台的核心模块(用户、认证、RBAC、缓存、设置)
后端·低代码·nestjs
王码码203514 小时前
Flutter for OpenHarmony:使用 pluto_grid 打造高性能数据网格
flutter·http·华为·架构·harmonyos
先跑起来再说14 小时前
从原理到实践:彻底搞懂Cookie和Session的区别
计算机网络·http·https
兰.lan14 小时前
【黑马ai测试】HTTP协议-抓包工具定位-弱网测试-缺陷介绍
网络·python·网络协议·http