typescript - classToPlain 转换不适用于路由控制器
问题描述
关于类转换器和路由控制器的使用。
也许是我不明白 class-transformer lib 的真正含义,但我想用它来转换从服务器(第三方)接收到的对象并将它们适应我自己的模型,使用不同的名称。理论上哪个应该有效,并且在 console.log-ing 新转换模型时,甚至在 JSON.stringify-ing 时有效。
但是由于某种原因,当使用路由控制器输出模型时,它只是输出相同的源对象。
用户等级:
class User {
@Expose({ name: 'uid' }) // To convert/rename the "uid" property received from the server
id: string
firstName: string
lastName: string
}
用户控制器.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'
}
但是来自用户控制器(通过路由控制器库)的响应是:
{
uid: '123',
firstName: 'Matthew',
lastName: 'Michalsky'
}
你看到我可能遗漏/做错了什么吗?谢谢。
解决方案
正确的。响应发回一个 json 数据,我们不能用它来传输类名。因此,如果您从控制器返回一个类实例,则routing-controllers
适用classToPlain
于它,您将获得一个转换后的普通对象。
如果您想跳过此行为,您应该配置@ResponseClassTransformOption
.
@ResponseClassTransformOption({
ignoreDecorators: true,
})
@Get('/')
async get() {
作为一个选项,您可以设置转换方向,例如仅 toClass,然后当通过 classToPlain 处理类实例时,此类装饰器不起作用。
推荐阅读
- regex - 刮掉这个嘈杂的价格标签的正确方法
- android - EACCES(权限被拒绝)也适用于我的应用程序创建的文件?
- html - 从 \\localhost\c$ 打开 Google 地球地标时缺少气球内容是否有修复?
- android - 如何为颜色选择器添加淡入淡出效果
- javascript - 如何在 NodeJS 中结合来自 2 个不同 var 的日期和时间
- python - 完全更新 matplotlib 图(不附加数据)
- vba - 运行时错误“1004”应用程序定义或对象定义错误
- google-cloud-platform - 光束中大窗口的间隔触发
- node.js - 如何使用 pg 从 postgres 存储过程(或函数)中检索结果集
- python - 如何在 Telethon 事件处理程序中获取特定时区的时间