一、项目搭建
安装nestjs脚手架
// 安装nestjs脚手架
npm i @nestjs/cli
// 新建
nest new [名字]
//选择要用的工具
npm / yarn / pnpm
文件信息:
【main.ts】:
入口文件,通过NestFactory(由nestjs/core库抛出的对象),该对象中有create方法包裹module 。
【app.module.ts】:
可以成为根模块
【其他文件可以删除】
import { Module } from '@nestjs/common';
@Module({
imports: [ 放入要注册的子模块 ],
controllers: [],
providers: [],
})
export class AppModule {}
注册子模块的方法:
使用终端,使用 nest generate module [命名],即可生成子模块。
在app.module.ts中注入新声明的子模块
添加controller:
命令:nest generate controller [命名]
添加service:
命令:nest generate service [命名]
controller层: 处理请求与响应
service层:
在controllers、providers中声明模块叫做 Dependency Injection (依赖注入)
// 新建ProductOrder模块,使用该命令会生成一个子模块的目录,该目录下包含一个子模块的Module文件,使用该模块,需要在app.module.ts文件中进行注入,命令如下:
nest generate module ProductOrder
// 新建controller
nest generate controller ProductOrder
// 新建service
nest generate service ProductOrder
二、代码内容
// controller层只做响应,
@Injectable()
export class ProductOrderService {}
// 加上Injectable注解,证明,该变量是可以被注入的
import { Module } from '@nestjs/common';
import { ProductOrderController } from './product-order.controller';
import { ProductOrderService } from './product-order.service';
import { ProductOrderRepository } from './product-order.repository';
@Module({
controllers: [ProductOrderController],
providers: [
ProductOrderService,
ProductOrderRepository,
],
})
export class ProductOrderModule {}
/*
模块需要在providers中进行注入,然后使用
*/
// 在product-order.service.ts中写入内容
import { Injectable } from '@nestjs/common';
import { ProductOrderRepository } from './product-order.repository';
@Injectable()
export class ProductOrderService {
constructor( private readonly productOrderRepository: ProductOrderRepository ){}
}
// 在product-order.repository.ts中写入内容
import { Injectable } from '@nestjs/common';
// 自己写构造方法
@Injectable()
export class ProductOrderRepository {}
// product-order.controller.ts中的内容
import { Controller, Post } from '@nestjs/common';
import { ProductOrderService } from './product-order.service';
// 可是视为描述器,注解,通过注解,说明这是一个nest的控制器,访问某个路由的时候,会进入这个控制器,访问到某个方法。
// 控制器的作用就是处理HTTP请求,并返回HTTP响应。product-order是路由的前缀,后面跟着的createOrder是具体的路由。
@Controller('product-order')
export class ProductOrderController {
// 构造器,使用依赖注入的DI模式,将ProductOrderService注入到ProductOrderController中
constructor( private readonly productOrderService: ProductOrderService ) {}
// 在这里指定请求,是post请求,还是get请求,请求后加的是路由的路径。
@Post('/createOrder')
public createOrder(){
return "这是product-order.comtroller.ts中的内容!"
}
}
使用Apifox进行测试
// main.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.create(AppModule) 用于创建 Nest 应用实例,并传入 AppModule 作为启动模块。
* 本地监听端口:3000
*
*/
根据【product-order.controller.ts】中设置的路由,方法为POST,配置Apifox中的接口,路径为
http://localhost:3000/product-order/createOrder
具体效果如下: