我创建了基本的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 { }
究竟是什么导致了这个错误?如何才能让它与第一个解决方案(模块)一起工作?
答案 0 :(得分:0)
是否可以显示您的TokenService和WorkerService?
您应该始终在组件中注册以在所有应用程序范围内使用。
如果您在特定模块中使用并试图在另一个模块中使用,可能您将无法使用。
另一种情况。想象一下,如果你有一个在A模块中注册的组件,在B模块中注册的B组件,并想象如果试图在B模块中使用A组件,你就不能这样做,除非你在应用模块中注册或注册在B模块内的一个组件内(不要这样做,只应在所有范围内使用共享服务,这只是一个架构概述。)