nestjs中模块的基础和进阶
创建模块
nest g module admin
组织架构
src
module
admin
controller
news
user
api
api.controller
default
controller
news
user
app.module.ts
给子模块期别名
从上图可看出admin和default中都有news路由,要怎么区别呢?
实现方法
import { Controller, Get } from '@nestjs/common';
// 使用admin/news来区别不同模块的相同路由名
@Controller('admin/news')
export class NewsController {
@Get()
index() {
return '我是admin模块里的news控制器';
}
}
公共服务
思路
将app.service当做公共服务,然后再admin模块中使用,最后访问http://localhost:3000/admin/news来验证
1.创建
将app.service当做公共服务,创建getConfig方法。
import { Injectable } from '@nestjs/common';
@Injectable()
export class AppService {
// 公共服务的方法
getConfig() {
return '我是公共服务';
}
}
2.使用
2.1 先在admin.module中引入
// ...
// 公共服务1.在其他模块中引入
import { AppService } from '../../app.service';
@Module({
controllers: [UserController, NewsController],
// 公共服务2.声明
providers: [NewsService, AppService]
})
export class AdminModule {}
2.2 在news.controller中使用
import { Controller, Get } from '@nestjs/common';
import { NewsService } from '../../service/news/news.service';
// 公共服务3.引入
import { AppService } from '../../../../app.service';
@Controller('admin/news')
export class NewsController {
constructor(
private newsService: NewsService,
// 公共服务4.声明
private appService: AppService,
){}
@Get()
index() {
// return '我是admin模块里的news控制器';
console.log(this.appService.getConfig());
// 公共服务5.访问 http://localhost:3000/admin/news
return this.newsService.getNews();
}
}
2.3 验证
http://localhost:3000/admin/news
共享模块-进阶
思路:创建share模块 ==> 暴露方法 ==> 在其他模块中引入share模块并使用
1.在module下创建share模块和base方法
module/share/base/base.service.ts
1.1 share.module
import { Module } from '@nestjs/common';
import { BaseService } from './base/base.service';
@Module({
providers: [BaseService],
// 共享模块第一步:暴露服务
// 注意这是最关键的一步,否则后面会报错
exports: [BaseService]
})
export class ShareModule {}
1.2 share/base/base.service.ts
import { Injectable } from '@nestjs/common';
@Injectable()
export class BaseService {
getData() {
return '我是公共模块里面的服务';
}
}
2.使用共享模块
2.1 在admin.module.ts中引入
// ...
// 共享模块1: 引入
import { ShareModule } from '../share/share.module'
@Module({
// 共享模块2: 声明
imports: [ShareModule],
controllers: [UserController, NewsController, OrderController],
providers: [NewsService, AppService]
})
export class AdminModule {}
2.2 在admin模块的order.controller中使用
import { Controller, Get } from '@nestjs/common';
// 共享模块3: 在具体的controllr引入
import { BaseService } from '../../../share/base/base.service';
@Controller('admin/order')
export class OrderController {
constructor(
// 共享模块4: 声明
private baseService: BaseService
){}
@Get()
index() {
// 共享模块4: 使用
console.log(this.baseService.getData());
return 'admin-order: 验证公共服务';
}
}