我有一个数据库,其中包含帐户(帐户、用户、角色、权限等)以及与帐户相关的流程和进程。如果客户希望,我们将尝试为客户端数据(在本例中为流程和进程)创建不同的数据库。
如果账户数据有一个特定的mongo uri,它应该使用它来处理流,否则它应该使用正常的连接。
我们有一个guard来验证用户并获取他的帐户,并希望在调用guard之后连接到正确的数据库,但是MongooseService在guard之前被调用,因为它在app.module.ts中,因此uri信息是空的:
MongooseModule.forRootAsync({
connectionName: 'customer',
useClass: MongooseService,
}),
MongooseService有:
@Injectable({ scope: Scope.REQUEST })
export class MongooseService implements MongooseOptionsFactory {
constructor(@Inject(REQUEST) private readonly request: IRequest) {}
createMongooseOptions(): MongooseModuleOptions {
console.log(
'MongooseService',
this.request.date,
this.request.url,
this.request.user,
);
if (this.request.user.uri) {
return {
uri: this.request.user.url,
useNewUrlParser: true,
useUnifiedTopology: true,
};
} else {
return { uri: // get uri from .env };
}
}
}
我们的警卫有这个:
...
// validate token
const token = this.getToken(request);
const jwtData = this.jwtService.verify<IJwtData>(token);
...
let user = await this.teamService.findOne(jwtData.id);
request.user = user;
...
有没有使用这种策略,使用连接名称(https://docs.nestjs.com/techniques/mongodb#multiple-databases),或者因为我们需要数据库中的数据,所以我们需要使用不同的方法?
先谢谢你,佩德罗
1条答案
按热度按时间gg58donl1#
您需要在Guard中为MongooseService和
inject
创建一个自定义提供者,这样就可以在调用Guard后示例化MongooseService
,用户数据可用