10.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: 验证公共服务';
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值