如果在模块中使用,Nest JS无法将服务注入防护

时间:2018-03-07 20:50:57

标签: node.js nestjs

我创建了基本的AuthGuard,但无法注入TokenService。我收到了这个错误:

  

错误:Nest无法解析AuthGuard的依赖关系(?)。请验证当前上下文中是否有[0]参数可用。

app.module.ts:

@Module({
    modules: [
        WorkModule,
    ],
    components: [TokenService],
})

export class ApplicationModule { }

auth.guard.ts:

@Guard()
export class AuthGuard implements CanActivate {
    constructor(
        private readonly tokenService: TokenService,
    ) { }
    public canActivate(dataOrRequest, context: ExecutionContext): boolean | Promise<boolean> | Observable<boolean> {
        return true;
    }
}

work.module.ts:

@Module({
    controllers: [WorkController],
    components: [WorkService],
})
export class WorkModule { }

更新,work.service.ts

import { Component, Inject, HttpStatus, HttpException } from '@nestjs/common';
const dataStore = require('nedb');
const workDB = new dataStore({ filename: '../db/work.db', autoload: true });
import * as moment from 'moment';
import { WorkDay, WorkDayDTO } from './work.model';
import { WorkHelpers } from './work.helpers';

@Component()
export class WorkService {
    public async getWorkGraphic(month: number, year: number) {
        return new Promise((resolve, reject) => {
            // logic here
        });
    }

    public async addOrUpdateWorkDay(day: WorkDayDTO) {
        return new Promise((resolve, reject) => {
            // logic here
        });
    }

    public async removeWorkDay(workDayId: string) {
        return new Promise((resolve, reject) => {
            // logic here
        });
    }
}

但是使用此配置一切正常:

@Module({
    controllers: [
        WorkController,
    ],
    components: [TokenService, WorkService],
})

export class ApplicationModule { }

究竟是什么导致了这个错误?如何才能让它与第一个解决方案(模块)一起工作?

1 个答案:

答案 0 :(得分:0)

是否可以显示您的TokenService和WorkerService?

您应该始终在组件中注册以在所有应用程序范围内使用。

如果您在特定模块中使用并试图在另一个模块中使用,可能您将无法使用。

另一种情况。想象一下,如果你有一个在A模块中注册的组件,在B模块中注册的B组件,并想象如果试图在B模块中使用A组件,你就不能这样做,除非你在应用模块中注册或注册在B模块内的一个组件内(不要这样做,只应在所有范围内使用共享服务,这只是一个架构概述。)