如何向 NestJS 中的实体添加其他属性?
How can I add additional properties to an entity in NestJS?
我正在使用 NestJS 构建一个 api,到目前为止一切正常!
我有一个 users
table 和一个相应的 users.entity.ts
文件:
@Entity({ name: 'users' })
export class User extends BaseEntity {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({
unique: true,
})
email: string;
...
我正在使用 AWS Cognito 作为身份验证提供程序 - 那里的一切也都运行良好。我尽量不重复东西,所以我想用 Cognito 保留 given_name
和 family_name
值,并且我的 postgres table.
上没有冗余字段
我可以毫无问题地获取用户,但我不确定如何将它们“组合”到我的 user
实体中。
例如,
// users.service.ts
const user = await this.usersRepository.findOne({
where: {
id: userId,
},
});
// id: dbc92...
// email: example@email.com
const cognitoUser = await this.cognitoService.adminGetUser(user.id);
// id: dbc92...
// email: example@email.com
// given_name: "Tony"
// family_name: "Stark"
return user;
我的 user
实体上没有 given_name
属性——我不确定我是否 需要 一个?
理想情况下,我想我想做的是,
user.givenName = cognitoUser.given_name
user.familyName = cognitoUser.family_name
...
return user
但是因为我的 user.entity
文件没有 givenName
属性,所以我不太乐意这样做。
我知道我可以使用扩展运算符“合并”这两个对象,但如果可能的话,我想 return 实际的 user
实体。我怎样才能从两个来源中提取 return 正确的实体?
您可以在不添加 @Column
装饰器的情况下添加所需的属性。它不会在您的 table 中创建列,但您的实体中仍然有它们。
正如 Mohammad 所说,如果您想要完成的是:
user.givenName = cognitoUser.given_name
user.familyName = cognitoUser.family_name
那么你可以这样做:
@Entity({ name: 'users' })
export class User extends BaseEntity {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({
unique: true,
})
email: string;
given_name: string;
family_name: string;
}
并且能够仅处理来自 User
的数据,而无需在数据库中复制具有不必要列的数据。
我正在使用 NestJS 构建一个 api,到目前为止一切正常!
我有一个 users
table 和一个相应的 users.entity.ts
文件:
@Entity({ name: 'users' })
export class User extends BaseEntity {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({
unique: true,
})
email: string;
...
我正在使用 AWS Cognito 作为身份验证提供程序 - 那里的一切也都运行良好。我尽量不重复东西,所以我想用 Cognito 保留 given_name
和 family_name
值,并且我的 postgres table.
我可以毫无问题地获取用户,但我不确定如何将它们“组合”到我的 user
实体中。
例如,
// users.service.ts
const user = await this.usersRepository.findOne({
where: {
id: userId,
},
});
// id: dbc92...
// email: example@email.com
const cognitoUser = await this.cognitoService.adminGetUser(user.id);
// id: dbc92...
// email: example@email.com
// given_name: "Tony"
// family_name: "Stark"
return user;
我的 user
实体上没有 given_name
属性——我不确定我是否 需要 一个?
理想情况下,我想我想做的是,
user.givenName = cognitoUser.given_name
user.familyName = cognitoUser.family_name
...
return user
但是因为我的 user.entity
文件没有 givenName
属性,所以我不太乐意这样做。
我知道我可以使用扩展运算符“合并”这两个对象,但如果可能的话,我想 return 实际的 user
实体。我怎样才能从两个来源中提取 return 正确的实体?
您可以在不添加 @Column
装饰器的情况下添加所需的属性。它不会在您的 table 中创建列,但您的实体中仍然有它们。
正如 Mohammad 所说,如果您想要完成的是:
user.givenName = cognitoUser.given_name
user.familyName = cognitoUser.family_name
那么你可以这样做:
@Entity({ name: 'users' })
export class User extends BaseEntity {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({
unique: true,
})
email: string;
given_name: string;
family_name: string;
}
并且能够仅处理来自 User
的数据,而无需在数据库中复制具有不必要列的数据。