前言
在写之篇文章之前,我写了一些 NestJS 中实现某些功能的文章,收录在我的 NestJS专栏 中,感兴趣的小伙伴可以去看看,按理来说,应该先介绍本文,再往下走,本文虽迟但到...
开始
项目构建
在开始之前,我们要先 全局 安装 nestjs脚手架,以初始化 nestjs 项目,你的 node 版本必须 大于12,13除外 :
npm install @nestjs/cli -g
image.png
脚手架安装完成之后,我们来搭建项目,首先进入一个空目录,通过脚手架命令来初始化项目:
nest new nest-demo
询问我们使用哪种包管理器,这里我选择 npm:
image.png
此时它正在帮我们创建项目:
image.png
到这里项目就创建完成了,接下来进入项目并启动它
image.png
出现下面这个,并且浏览器访问 localhost:3000 可以出来 hello world 说明你的 nest 项目就成功跑起来了
image.png
image.png
创建module
我习惯于将所有的接口放置在 api 模块内,所以需要先在 src 下新建 modules 目录用来存放模块,这里新增一个 api 模块,在模块中存在有 controller service 目录,以及 api.module.ts 文件
image.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 并注册,在 controller 的 find 方法中 return service 的 find 方法并传参
// ...
import { HelloService } from '../service/hello.service';
// ...
constructor(private readonly helloService: HelloService) {}
@Get()
find(@Query() { name }){
return this.helloService.find(name);
}
编写module
当我们 controller 和 service 都编写完成之后,接下来就是在 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.png
结语
我是一名前端程序员,但不止于前端,如果对 nestjs 的操作使用有误,也欢迎各位大佬点评指正,欢迎评论区一起探讨,一起学习,一起进步~,最后,再次感谢你能看到此处!