美文网首页
Nestjs 序列化(Serialization)

Nestjs 序列化(Serialization)

作者: yanmingfei | 来源:发表于2020-04-21 23:32 被阅读0次

官方文档

Nest提供了内置功能,可帮助确保可以直接方式执行这些操作。该ClassSerializerInterceptor拦截器使用功能强大的类变压器包提供变换对象的声明和可扩展的方式。它执行的基本操作是获取方法处理程序返回的值,并应用class-transformer中classToPlain()函数。这样,它可以将装饰器表示的规则应用于实体/ DTO类,如下所述。class-transformer

上面是官方说明,那么暗体为什么要这么做,其实是为了排除掉实体中的一些特殊字段。比如密码字段

// users.entity.ts
import {BeforeInsert, Column, CreateDateColumn, Entity, PrimaryGeneratedColumn, UpdateDateColumn} from "typeorm";
import {hash} from "bcrypt";
import {Exclude} from "class-transformer";
@Entity()
export default class Users {
    @PrimaryGeneratedColumn()
    id: number;

    @Column('varchar', {unique: true})
    name: string;

    @Column()
    @Exclude()
    password: string;

    @CreateDateColumn()
    createdAt: Date;

    @UpdateDateColumn()
    updatedAt: Date

    @BeforeInsert()
    async changePassword(){
        this.password = await hash(this.password,12)
    }
}

在控制器返回做处理

import {
    ClassSerializerInterceptor,
    Controller,
    Param,
    Post,
    UseInterceptors
} from '@nestjs/common';
import {UsersService} from "./users.service";
import {UserDto} from "./user.dto";

@Controller('users')
export class UsersController {
    constructor(private readonly usersService: UsersService) {}

    @Get(':id')
    @UseInterceptors(ClassSerializerInterceptor)
    async show(@Param('id') id:string){
        const res = await this.usersService.show(id)
        return res;
    }
}

相关文章

网友评论

      本文标题:Nestjs 序列化(Serialization)

      本文链接:https://www.haomeiwen.com/subject/jxkvihtx.html