我创建了基本的 AuthGuard,但无法注入(inject) TokenService。我收到此错误:
Error: Nest can't resolve dependencies of the AuthGuard (?). Please verify whether [0] argument is available in the current context.
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 { }
到底是什么导致了这个错误,如何让它与第一个解决方案(模块)一起工作?
最佳答案
可以显示你的TokenService和WorkerService吗?
您应该始终在组件中注册两者,以便在所有应用程序范围内使用。
如果您在特定模块内使用并尝试在另一个模块中使用,则可能无法使用。
另一个场景。想象一下,如果您在 A 模块中注册了 A 组件,在 B 模块中注册了 B 组件,并想象如果您尝试在 B 模块内使用 A 组件,则除非您在应用程序模块中注册或在 B 模块内的 A 组件中注册,否则您无法做到这一点(不要这样做,只应在所有范围内使用共享服务,这只是架构概述)。
关于node.js - 如果在模块中使用,Nest JS 无法将服务注入(inject)到守卫中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49160973/