我们正在建立微服务的单一存储库,并希望有一些共享库可以导入到各种服务中。
现在,我正在尝试建立一个共享模块,该模块将具有需要访问请求的提供程序。这是一个示例:
import { Injectable, Scope, Inject } from '@nestjs/common'
import { REQUEST } from '@nestjs/core'
import { Request } from 'express'
import { APILogger } from '@freebird/logger'
import { APIGatewayProxyEvent, Context } from 'aws-lambda'
export interface IAPIGatewayRequest extends Request {
apiGateway?: {
event?: APIGatewayProxyEvent
context?: Context
}
}
@Injectable({ scope: Scope.REQUEST })
export class RequestLogger extends APILogger {
constructor(@Inject(REQUEST) request: IAPIGatewayRequest) {
if (!request.apiGateway || !request.apiGateway.event || !request.apiGateway.context) {
throw new Error(
'You are trying to use the API Gateway logger without having used the aws-serverless-express middleware',
)
}
super(request.apiGateway.event, request.apiGateway.context)
}
}
我一直试图像这样将其捆绑为模块:
import { Module } from '@nestjs/common'
import { RequestLogger } from './logger'
@Module({
providers: [RequestLogger],
exports: [RequestLogger],
})
export class LambdaModule {}
然后将其导入到主服务模块中,如下所示:
import { Module } from '@nestjs/common'
import { AppController } from './app.controller'
import { AppService } from './app.service'
import { LambdaModule } from '@freebird/nest-lambda'
@Module({
imports: [LambdaModule],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
但是,当我这样做时,我得到一个错误:
嵌套无法解析RequestLogger(?)的依赖项。请做出来 确保索引为[0]的参数在AppModule中可用 上下文。
但是,当我将RequestLogger提供程序插入服务模块,并像这样包含它时,我没有收到错误:
import { Module } from '@nestjs/common'
import { AppController } from './app.controller'
import { AppService } from './app.service'
import { RequestLogger } from './logger'
@Module({
controllers: [AppController],
providers: [AppService, RequestLogger],
})
export class AppModule {}
答案 0 :(得分:0)
我发现了问题。就我而言,我的库包和服务包之间的要求略有不同。因此,不同版本的nest在起作用。这显然会引起冲突。