nestjs学习笔记

2.nestjs:根据业务划分不同的module

2022-05-03  本文已影响0人  HunterK

module的概念建议自己去看看官网的介绍
根据我个人的理解,module是业务域的区分,比如一个系统中有:用户,商品,订单。那么我们就可以建立分别建立用户module,商品module,订单module.然后每个module只管理自己作用域下的provider(类似controller,service)。

如果说我们想UserService使用OrderService,那么首先就要在OrderModule中export:[OrderService],然后在用户module导入OrderModule,现在就可以在UserService的构造方法中注入OrderService使用了。

如果说我们定义一个通用的CommonModule,里面提供的Provider可以供所有Module使用,那么就需要在该CommonModule上加上@Global(),现在其他module在使用CommonModule下CommonService时就可以直接使用,而无需导入CommonModule。全局模块应该只注册一次,最好由根或核心模块注册。

这里创建两个module:
1.internal:全局使用的工具包和代码放在这里,此module注册为全局module,其他module,使用internal的提供的provider时候无需导入此module.
2.user:业务域用户module.

1.创建internal和user的module

nest g module internal
nest g module user

2.创建user的controller和service,不带测试

nest g co user --no-spec
nest g service user --no-spec

3.自行添加一些代码在user 的controller和service用于测试,最终效果

app module(root module):

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { InternalModule } from './internal/internal.module';
import { UserModule } from './user/user.module';

@Module({
  imports: [InternalModule, UserModule],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

internal module:

import { Global, Module } from '@nestjs/common';

@Global()
@Module({})
export class InternalModule {}

user module:

import { Module } from '@nestjs/common';
import { UserController } from './user.controller';
import { UserService } from './user.service';

@Module({
  controllers: [UserController],
  providers: [UserService]
})
export class UserModule {}

user controller

import { Controller, Get } from '@nestjs/common';
import { UserService } from './user.service';

@Controller('user')
export class UserController {
    constructor(private readonly userService:UserService){
    }
    @Get()
    async testGet() {
       return this.userService.testGet()
    }
}

user service

import { Injectable } from '@nestjs/common';

@Injectable()
export class UserService {
    async testGet(){
        return 'test Get';
    }
}

启动之后使用postman调用一下测试成功:


image.png

tips:使用nest脚手架创建对应的资源(module,controller,service)会自动注入module.

nest g module user
nest g controller user
nest service controller user
上一篇 下一篇

猜你喜欢

热点阅读