前言
在写之篇文章之前,我写了一些 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
的操作使用有误,也欢迎各位大佬点评指正,欢迎评论区一起探讨,一起学习,一起进步~,最后,再次感谢你能看到此处!