【问题标题】:How to Inject plain Service/Provider in nest.js如何在nest.js 中注入普通的服务/提供者
【发布时间】:2019-04-17 11:45:08
【问题描述】:

我在 nest.js 中创建了一个普通的 typeScript 类。 JwtTokenService.js

// JwtTokenService.js

import { Injectable, Optional } from '@nestjs/common';
import { JwtService } from '@nestjs/jwt';
import { JwtPayload } from '../modules/auth/interface/jwt-payload.interface';

@Injectable()
export class JwtTokenService {
  constructor(private readonly jwtService: JwtService) {}

  async generateJWT(payload: object): Promise<string> {
    payload['type'] = 'access_token';
    const token = this.jwtService.sign({ payload });
    return token;
  }
}

现在我如何在任何控制器中使用它。比如用户、身份验证等。

【问题讨论】:

    标签: javascript typescript nestjs


    【解决方案1】:

    在嵌套应用模块中注册服务:

    import { Module } from '@nestjs/common';
    import { YourController } from './path-to/your.controller';
    import { JwtTokenService } from './path-to/JwtTokenService.service';
    
    @Module({
      controllers: [YourController],
      providers: [JwtTokenService],
    })
    export class ApplicationModule {}
    

    然后你可以在你的控制器中使用它:

    import { Controller, Get, Post, Body } from '@nestjs/common';
    import { JwtTokenService } from './path-to/JwtTokenService.service';
    
    @Controller('your')
    export class YourController {
      constructor(private readonly jwtTokenService: JwtTokenService) {}
    
      @Get()
      async get() {
        // use `this.jwtTokenService`
        ...
      }
    }
    

    Nest 使用DependencyInjection pattern 向控制器提供服务,这就是为什么您需要在应用程序模块中声明服务的提供方式。

    【讨论】:

    • 非常感谢。我一直都做对了。问题是别的,我认为它与服务注入有关。
    • 顺便说一句,我们可以使用JwtTokenService,只需将其导入您当前(需要使用它的地方)Module 文件,它就可以工作了。我们不需要在ApplicationModule中导入
    • 是的,但最终它必须在 ApplicationModule 中导入,例如您的 ApplicationModule 将导入特定模块。
    猜你喜欢
    • 2022-08-19
    • 2022-12-20
    • 1970-01-01
    • 2016-05-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-20
    • 2018-09-05
    • 1970-01-01
    相关资源
    最近更新 更多