- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我希望能够记录(如在 console.log
中)正在执行的每个 SQL 查询的登录用户。我正在使用 Nest.js 和 TypeORM(它是 Nest.js 的包装器)。我不知道如何将特定于请求的数据注入(inject)到全局(单个)提供程序中。
我使用的是 Nest.js v6.6.3 和 @nestjs/typeorm
v6.1.3。
// current-user.service.ts
@Injectable({ scope: Scope.REQUEST })
export class CurrentUserService {
get currentUser(): string | null {
if (!this.request || !this.request.user) {
return null;
}
return this.request.user.email;
}
constructor(@Optional() @Inject(REQUEST) private request: Request) {}
}
// logger.service.ts
@Injectable()
export class LoggerService extends Logger {
constructor(private readonly moduleRef: ModuleRef) {
super();
}
log(message: any, context?: string) {
super.log(this.formatMessage(message), context);
}
private formatMessage(message: any) {
// ** This is the problematic code **
const currentUserService = this.moduleRef.get(CurrentUserService, {
strict: false,
});
return `[${currentUserService.currentUser}]: ${message}`;
}
}
// typeorm-logger.service.ts
@Injectable()
export class TypeormLogger implements Logger {
// Logger is imported from `typeorm`
constructor(private logger: LoggerService) {}
logQuery(query: string) {
// there are more params, don't matter for the sake of the argument
this.logger.log(query);
}
}
// logger.module.ts
@Module({
providers: [LoggerService, TypeormLogger],
exports: [LoggerService, TypeormLogger],
})
export class LoggerModule {}
// app.module.ts
@Module({
imports: [
TypeOrmModule.ForRootAsync({
imports: [LoggerModule],
inject: [TypeormLogger],
useFactory: (typeormLogger: TypeormLogger) => {
return {
type: 'mysql',
logger: typeormLogger,
keepConnectionAlive: false,
...
};
},
}),
],
})
export class AppModule {}
似乎使用moduleRef.get()
无法进行跨Module
解析,所以我尝试使用moduleRef.resolve()
> 相反,但我仍然得到带有 request === undefined
的 CurrentUserService
。此外,resolve()
返回一个 Promise
,这对于日志记录之类的东西来说并不理想。
上面是一个特定的用例,但可以概括 - 如果您的代码不是直接从 Controller 调用的,则无法注入(inject) transient 数据,例如经过身份验证的用户或请求 ID(两者都对日志记录有用) )。这看起来很奇怪,特别是因为 Nest.js 严重依赖 IoC。
最佳答案
我最终围绕 Nest.js 进行了工作,到目前为止它似乎工作得很好。请注意,我们在内部应用程序中使用它,因此我们的并发用户数较低,所以 YMMV。
关于node.js - 在全局(单例)服务中使用特定于请求的上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57773494/
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!