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(基础服务处)

相关推荐
秉承初心9 小时前
HTTP 压力测试工具autocannon(AI)
网络协议·测试工具·http
你不会困10 小时前
什么?每天早上准时9点给你发送github项目推荐邮件
前端·javascript·nestjs
凯凯爱前端11 小时前
通俗易懂的 TLS 协商过程
http
林太白13 小时前
学到了,强大的企业级NestJS必须了解一下
前端·后端·nestjs
无名之逆14 小时前
[特殊字符] 超轻高性能的 Rust HTTP 服务器 —— Hyperlane [特殊字符][特殊字符]
java·服务器·开发语言·前端·网络·http·rust
浓眉大眼朱时茂17 小时前
深入理解 NestJS @Query 装饰器的实现原理
nestjs
堕落年代19 小时前
HTTP请求当中若用户还没接收到返回数据就离线但服务器资源已经删除的情况
网络·网络协议·http
霸道流氓气质1 天前
Winform入门进阶企业级开发示例:http接口数据清洗转换、断线续传、mqtt数据传输实例详解(附代码资源下载)
http·c#·winform
无名之逆1 天前
[特殊字符] Hyperlane:Rust 高性能 HTTP 服务器库,开启 Web 服务新纪元!
java·服务器·开发语言·前端·网络·http·rust
无名之逆1 天前
Hyperlane框架:下一代高性能Rust Web框架 [特殊字符]
服务器·开发语言·前端·后端·http·rust