经验分享
NestJS开发第一个接口
# 前言在写之篇文章之前,我写了一些 `NestJS` 中实现某些功能的文章,收录在我的 `NestJS专栏` 中,感兴趣的小伙伴可以[去看看](https://juejin.cn/column/7
2023-04-24 18:33:52
11

前言

在写之篇文章之前,我写了一些 NestJS 中实现某些功能的文章,收录在我的 NestJS专栏 中,感兴趣的小伙伴可以去看看,按理来说,应该先介绍本文,再往下走,本文虽迟但到...

开始

项目构建

在开始之前,我们要先 全局 安装 nestjs脚手架,以初始化 nestjs 项目,你的 node 版本必须 大于12,13除外

npm install @nestjs/cli -g

image.pngimage.png

脚手架安装完成之后,我们来搭建项目,首先进入一个空目录,通过脚手架命令来初始化项目:

nest new nest-demo

询问我们使用哪种包管理器,这里我选择 npm

image.pngimage.png

此时它正在帮我们创建项目:

image.pngimage.png

到这里项目就创建完成了,接下来进入项目并启动它

image.pngimage.png

出现下面这个,并且浏览器访问 localhost:3000 可以出来 hello world 说明你的 nest 项目就成功跑起来了

image.pngimage.png

image.pngimage.png

创建module

我习惯于将所有的接口放置在 api 模块内,所以需要先在 src 下新建 modules 目录用来存放模块,这里新增一个 api 模块,在模块中存在有 controller service 目录,以及 api.module.ts 文件

image.pngimage.png

编写controller

我们在 src/modules/api/controller 下有一个 hello.controller.ts 文件,首先引入 Controller 注解,使用了这个注解,他才可以是一个 controller

import { Controller } from "@nestjs/common";

接下来使用这个 注解 并定义 导出类,将 controller 导出

@Controller("/")
export class HelloController {
  constructor() {}
}

然后来定义控制器方法,注解中传入参数 /,表示访问 localhost:3000 根路由走到这里,假设这里的方法名叫 find

@Controller("/")
export class HelloController {
  constructor() {}
  
  find(){}
}

这个 find 方法就是我们接口要执行的内容,通过 localhost:3000 来访问,然后我们让这个接口是 Get 请求,并接收一个 name 参数,来改造 find 方法

// 引入Get注解,Query注解
import { Controller,Get,Query } from "@nestjs/common";

// ...
@Get()
find(@Query() { name }){
  console.log(name)
}

这样目前还是不行的,因为我们的 api.module.ts 还没有挂载,我们一步一步往下来

编写service

我们的业务代码很多时候是可以复用的,所以都写在 controller 中的方法内显然是不合适的,所以这里把业务代码写在 service,通过 controller 方法跳转到 service 去处理接口

src/modules/api/service 下有一个 hello.service.ts 文件,首先引入 Injectable 注解,使用了这个注解用来修饰 service

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

接下来使用这个 注解 并定义 导出类,将 service 导出,并定义一个 service 方法 find

@Injectable()
export class HelloService {
  find(name) {
    return `Hello World ! ${name}`;
  }
}

这个时候 service 方法就实现了

完善controller

这时,我们回到 controller 中,引入这个 service 并注册,在 controllerfind 方法中 return servicefind 方法并传参

// ...
import { HelloService } from '../service/hello.service';

// ...
constructor(private readonly helloService: HelloService) {}

@Get()
find(@Query() { name }){
  return this.helloService.find(name);
}

编写module

当我们 controllerservice 都编写完成之后,接下来就是在 module 中使用,最后再将 module 挂载,一个接口就实现了

src/modules/api/api.module.ts 文件中先引入 Module注解 HelloController HelloService

import { Module } from '@nestjs/common';
import { HelloController } from './controller/hello.controller';
import { HelloService } from './service/hello.service';

然后使用 Module 注解,并导出 module

@Module({
  imports: [],
  // 将controller注册进入module
  controllers: [HelloController],
  // 将service注册进入module
  providers: [HelloService],
})
// 将module导出
export class ApiModule {}

挂载module

最后我们要将 ApiModule 挂载到 AppModule 中,这一步很简单,只需要在 app.module.ts 中引入 api.module.ts,并注入到 imports 中即可

import { Module } from '@nestjs/common';
// 默认的AppController和AppService可以删掉
// import { AppController } from './app.controller';
// import { AppService } from './app.service';
import { ApiModule } from 'src/modules/api/api.module';

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

最后重启项目,然后我们在浏览器输入 localhost:3000?name=nest,出现下面的结果说明接口成功

image.pngimage.png

结语

我是一名前端程序员,但不止于前端,如果对 nestjs 的操作使用有误,也欢迎各位大佬点评指正,欢迎评论区一起探讨,一起学习,一起进步~,最后,再次感谢你能看到此处!