classToPlain转换不适用于路由控制器

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

关于类变压器和路由控制器的用法。也许是我不了解class-transformer lib的真正含义,但是我想用它来转换从服务器(第三方)接收到的对象的接收,并将它们改编成我自己的模型,并使用不同的名称。理论上哪个应该起作用,并且在console.log-记录新的转换模型时,甚至当JSON.stringify-模型时,都可以。但是由于某些原因,使用路由控制器输出模型时,它只会输出相同的原始对象。

用户类别:

class User {
  @Expose({ name: 'uid' }) // To convert/rename the "uid" property received from the server
  id: string
  firstName: string
  lastName: string
}

users-controller.ts:

@JsonController('/users')
export class UsersController {
  @Get('/')
  async get() {
    const user = plainToClass(User, {
      uid: '123',
      firstName: 'Matthew',
      lastName: 'Michalsky'
    })

    console.log(user)

    return user
  }
}

控制台输出期望值:

User {
  id: '123',
  firstName: 'Matthew',
  lastName: 'Michalsky'
}

但是来自UsersController的响应(通过routing-controllers lib)是:

{
  uid: '123',
  firstName: 'Matthew',
  lastName: 'Michalsky'
}

您看到我可能会想念/做错了什么吗?谢谢。

typescript express class-transformer
1个回答
0
投票

对。响应会发送回json数据,因此我们无法使用该数据传输类名。因此,如果从控制器返回类实例,则routing-controllers在其上应用classToPlain并获得转换后的普通对象。

如果要跳过此行为,则应配置@ResponseClassTransformOption

  @ResponseClassTransformOption({
    ignoreDecorators: true,
  })
  @Get('/')
  async get() {
© www.soinside.com 2019 - 2024. All rights reserved.