1

我创建了基本的 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;
    }
}

工作模块.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 { }

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

4

1 回答 1

0

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

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

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

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

于 2018-03-08T21:24:32.653 回答