如何在nestjs中管理模式中的时间戳而不显式定义createdAt,updatedAt

问题描述 投票:0回答:2

我正在 NestJS 中使用 Mongoose,并且遇到了有关下面给出的 user.schema.ts 文件中的时间戳的问题。 这里打字稿不知道createdAt,updatedAt。

import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { Document } from 'mongoose';

interface TimeStamps {
  createdAt: Date;
  updatedAt: Date;
}

@Schema({ versionKey: false, timestamps: true })
export class User extends Document implements TimeStamps {
  @Prop({ required: true })
  firstName: string;

  @Prop({ required: true })
  lastName: string;

  @Prop({ required: true, unique: true })
  email: string;

  @Prop({ required: true })
  password: string;

  @Prop({ enum: ['admin', 'user'], default: 'user' })
  role: string;
}

export const UserSchema = SchemaFactory.createForClass(User);

这里我有一个错误:

“User”类错误地实现了“TimeStamps”接口。 类型“User”缺少类型“TimeStamps”中的以下属性:createdAt、updatedAt ts(2420)

我在 get-user.dto.ts 文件中使用时间戳来公开/允许它们发送到客户端。我想告诉打字稿有updatedAt和createdAt属性,但没有在模式中显式定义它们。我怎样才能做到这一点?

typescript mongoose nestjs mongoose-schema dto
2个回答
0
投票

遵循此说明:

https://khajehossini.medium.com/nestjs-createdat-and-updatedat-in-schema-d1ad6cf525e0

在上面的帖子里,你可以看到你的答案。


0
投票

我找到的解决方案是在架构选项中添加 timestamps true ,并添加 createdAtupdatedAt 作为架构属性。这样,猫鼬就会更新 updatedAt 属性本身。

@Schema({
  versionKey: false,
  timestamps: true,
  validateBeforeSave: true,
  validateModifiedOnly: true,
})
class User extends Document {
  @Prop({ required: true })
  firstName: string;

  @Prop({ required: true })
  lastName: string;

  @Prop({ required: true, unique: true })
  email: string;

  @Prop({ required: true })
  password: string;

  @Prop({ enum: ['admin', 'user'], default: 'user' })
  role: string;

  @Prop({ default: Date.now })
  createdAt: Date;

  @Prop({ default: Date.now })
  updatedAt: Date;
}
© www.soinside.com 2019 - 2024. All rights reserved.