- Nest项目创建
$ npm i -g @nestjs/cli\
$ nest new project-name
//项目启动
npm run start
//本地开发修改后监听重启
npm run start:dev
2.Nest设置局部路由前缀
访问地址:http://localhost:3000/zhanghu/hu
3.Nest设置全局路由前缀 在main.ts中通过
app.setGlobalPrefix()
访问地址:http://localhost:3000/ZH/zhanghu/hu
4.Nest新增模块
Controller:传统意义上的控制器,提供 api 接口,负责处理路由、中转、验证等一些简洁的业务;Service:又称为Provider, 是一系列服务、repo、工厂方法、helper 的总称,主要负责处理具体的业务,如数据库的增删改查、事务、并发等逻辑代码;Module:负责将Controller和Service连接起来,类似于namespace的概念; 使用 nest-cli 提供的指令可以快速创建文件,语法如下:
$ nest g [文件类型] [文件名] [文件目录(src目录下)]
我们输入:
$ nest g service searchMusic logical
$ nest g controller searchMusic logical
这样便为我们创建好了相应的searchMusic模块
在search-music.controller.ts中写入逻辑
import { Injectable } from '@nestjs/common';
@Injectable()
export class SearchMusicService {
searchBySinger(singerName:string){
if(singerName == '阿信'){
return '死了都要爱'
}
return '未查找到该歌曲作者'
}
}
在search-music.controller.ts中引入search-music.controller.ts,并添加api接口发生post请求(通过 @Body() 来获取请求体(request.body)的参数)
import { Controller,Post, Body } from '@nestjs/common';
import { SearchMusicService } from './search-music.service';
@Controller('search-music')
export class SearchMusicController {
constructor(private readonly SearchMusicService: SearchMusicService) {}
@Post('/searchBySinger')
getHello(@Body() body: any): string {
return this.SearchMusicService.searchBySinger(body.singer);
}
}
测试结果
补充:5.nest创建Module 打开 app.module.ts:
// src/app.module.ts\
import { Module } from'@nestjs/common';\
import { AppController } from'./app.controller';\
import { AppService } from'./app.service';\
import { UserService } from'./logical/user/user.service';\
import { UserController } from'./logical/user/user.controller';\
\
@Module({\
imports: [],\
controllers: [AppController, UserController],\
providers: [AppService, UserService],\
})\
exportclass AppModule {}
发现使用指令创建文件的时候,已经自动帮我们引入 User 相关文件了,而 main.ts 文件里,又已经引入了 AppModule,并使用 NestFactory 创建了实例。
因此,如果是新建无关痛痒的子模块,即使不新建 Module 文件,也能通过路由访问。
$ nest g module user logical
初始化的 Module 基本都长这个样:
import { Module } from '@nestjs/common';
@Module({})
export class UserModule {}
我们把 Service 和 Controller 组装起来:
import { Module } from '@nestjs/common';
import { UserService } from './user.service';
import { UserController } from './user.controller';
@Module({
controllers: [UserController],
providers: [UserService],
exports: [UserService],
})
export class UserModule {}
这样做有什么好处呢,就是其他 Module 想引入 User 的时候,就不用同时引入 Service 和 Controller 了,我们修改一下 app.module.ts:
// src/app.module.ts
import { Module } from'@nestjs/common';
import { AppController } from'./app.controller';
import { AppService } from'./app.service';
// import { UserService } from './logical/user/user.service';
// import { UserController } from './logical/user/user.controller';
import { UserModule } from'./logical/user/user.module';
@Module({
imports: [UserModule],
controllers: [AppController],
providers: [AppService],
})
exportclass AppModule {}