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

相关推荐
xy1899030 分钟前
http 状态码主要有哪些?【面试】
网络·网络协议·http
Apifox3 小时前
简单了解 Post 请求
http·web3·api
秃头披风侠_郑3 小时前
uniapp+thinkphp5实现微信扫码支付(APP支付)
全栈
ljh_a14 小时前
Django 和 Django REST framework 创建对外 API
python·http·django·flask·tornado
伏颜.18 小时前
HTTP协议深入
网络·网络协议·http
凯哥爱吃皮皮虾21 小时前
前端React、后端NestJs 实现大文件分片上传和下载
前端·react.js·nestjs
奇遇少年1 天前
HTTPS基础
网络协议·http·https
德迅云安全--陈琦琦1 天前
详解 HTTP 中间人攻击
网络协议·http·iphone
wh_xia_jun1 天前
qt6 通过http查询天气的实现
网络·网络协议·http
伏颜.1 天前
HTTP入门
http