上周我开始玩nest
,即使我发现它超级有用,也有一些事情是我无法从经典的Express/Mongoose
应用程序中复制的。其中一件事是在返回时提供敏感数据作为密码。
例如,在Express/Mongoose
应用中,我将这样做来清理用户可以看到的内容:
const { Schema, model } = require("mongoose");
const UserSchema = new Schema({
name: {
type: String,
required: [true, "Name is required"],
},
email: {
type: String,
required: [true, "Email is required"],
unique: true,
},
password: {
type: String,
required: [true, "Password is required"],
},
img: {
type: String,
},
rol: {
type: String,
required: true,
emun: ["ADMIN_ROL", "USER_ROL"],
},
state: {
type: Boolean,
default: true,
},
google: {
type: Boolean,
default: false,
},
});
UserSchema.methods.toJSON = function () {
const { __v, _id, password, ...user } = this.toObject();
user.uid = _id;
return user;
};
module.exports = model("Users", UserSchema);
正如您所看到的,我实现了类的方法来清理user
对象,并返回一个安全且干净的响应。
与此同时,使用NestJS/Mongoose
创建用户模式的类似方法如下:
import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { Document } from 'mongoose';
export type UserDocument = User & Document;
@Schema()
export class User {
@Prop({
required: [true, 'Name is required'],
})
name: string;
@Prop({
required: [true, 'Password is required'],
})
password: string;
@Prop()
img: string;
@Prop({
required: true,
enum: ['ADMIN_ROL', 'USER_ROL'],
})
rol: string;
@Prop({
default: true,
})
state: boolean;
@Prop({
default: false,
})
google: boolean;
}
export const UserSchema = SchemaFactory.createForClass(User);
非常基本的,只是遵循NestJS
文档。
使用Nest实现相同结果的最佳方法是什么?
此外,我会喜欢问你任何博客/youtuber的工作与巢,这将是赞赏
2条答案
按热度按时间x9ybnkn61#
Nest.js提供了OpenAPI规范中的Mapped Types。
您可以使用
PartialType
、OmitType
、PickType
函数来建立DTO。oipij1gg2#
如以下示例所示更改架构:
如果要隐藏字段,请添加select属性并设置为false