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

相关推荐
gywl4 小时前
openEuler VM虚拟机操作(期末考试)
linux·服务器·网络·windows·http·centos
某柚啊5 小时前
Windows开启IIS后依然出现http error 503.the service is unavailable
windows·http
_oP_i5 小时前
HTTP 请求Media typetext/plain application/json text/json区别
网络协议·http·json
yang_shengy6 小时前
【JavaEE】网络(6)
服务器·网络·http·https
ihengshuai7 小时前
HTTP协议及安全防范
网络协议·安全·http
码农丁丁12 小时前
[前端]HTTP库Axios
前端·网络协议·http·aixos
等一场春雨15 小时前
403 Forbidden HTTP 响应状态码
网络·网络协议·http
青灯文案119 小时前
前端 HTTP 请求由 Nginx 反向代理和 API 网关到后端服务的流程
前端·nginx·http
求知若饥19 小时前
NestJS 项目实战-权限管理系统开发(六)
后端·node.js·nestjs
小林熬夜学编程20 小时前
【Linux网络编程】第十四弹---构建功能丰富的HTTP服务器:从状态码处理到服务函数扩展
linux·运维·服务器·c语言·网络·c++·http