node.js - 如果在模块中使用,Nest JS 无法将服务注入(inject)到守卫中

标签 node.js nestjs

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

相关文章:

node.js - express + MongoDB

node.js - 如何在node.js中上传文件时中断?

javascript - NodeJS - 如何向 MySQL 插入多行

node.js - 为单个 Controller 在 NestJs 上设置请求正文大小限制

javascript - 是否可以防止计划任务在 NestJS 中重叠?

typescript - 如何在 e2e 测试中测试包含异常过滤器的 websockets(网关)

node.js - 使用身份感知代理在 Node js App Engine 环境中获取用户 API 访问权限

node.js - 将对象数组发布到 sails Controller 中

NestJS 使用类转换示例验证 header

node.js - NestJS - 在微服务中结合 HTTP 和 RabbitMQ