问题标签 [class-transformer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
144 浏览

javascript - 如何在类转换器上获取无效类型/类型不匹配的警告/错误列表

类转换器库提供了将 json 格式的普通 javascript 对象转换为 ES6 类的函数

但是我看到当json对象中的类型和类中定义的类型不匹配时它不会抛出任何错误

该类如下所示

在 myclass2 上,它可以正常工作,因为 age(23) 是一个数字。但在 myclass1 中,年龄设置为“abc”,不能转换为类中定义的数字类型。然而,代码通过没有任何错误。

在控制台日志中,您可以看到虽然年龄的类型已经明确定义,但年龄的值仍然可以设置为字符串。

控制台日志图像在这里(我没有足够的 RP 点来附加一个 url,它是一个新帐户)

我的问题是如何获得有关此类不匹配的警告/错误列表。

谢谢您的帮助。

https://stackblitz.com/edit/class-transformer-auuhvs

0 投票
3 回答
2105 浏览

node.js - Typescript - 使用 Class-transformer 扁平化 JSON 模型

我正在尝试在打字稿(node.js)中使用类转换器: https ://github.com/typestack/class-transformer

我想仅使用 1 个模型来扁平化 JSON,1 个 Dto 将进入数据库

如果我有以下 json :

数据库服务应接收以下对象:

这是我试图定义但它不起作用:

测试字段的结果未定义我该如何实现?我不想创建一个“中介”模型

0 投票
2 回答
458 浏览

javascript - typescript.-如何使用类验证器和类转换器(Nestjs)验证子类中的特定字段

我正在尝试使用类验证器和类转换在 Nestjs 中使用基本调用

我有一个基类如下:

现在我有一项服务应该让 childDto

现在我想要一个仅包含“名称”并在控制器或服务中验证的 dto

class childDto extends BaseClass{}

我如何确保只使用“名称”字段,创建另一个带有代码重复的 dto

并确保验证在每个特定的 DTO 下工作

谢谢

0 投票
2 回答
9366 浏览

validation - NestJS 在 DTO 创建期间执行验证之前使用 ValidationPipe 转换属性

我使用内置的 NestJS ValidationPipe 以及 class-validator 和 class-transformer 来验证和清理入站 JSON 正文有效负载。我面临的一种情况是入站 JSON 对象中大小写属性名称的混合。我想纠正这些属性并将其映射到我们新的 TypeScript NestJS API 中的标准驼峰模型,这样我就不会将遗留系统中的不匹配模式与我们的新 API 和新标准结合起来,主要是使用 @Transform 中的DTO 作为应用程序其余部分的隔离机制。例如,入站 JSON 对象的属性:

应该映射到

我想使用@Transform 来完成此操作,但我认为我的方法不正确。我想知道是否需要编写自定义 ValidationPipe。这是我目前的方法。

控制器:

测试我模型:

TestMeRequestDto:

用于 POST 到控制器的示例有效负载:

我遇到的问题:

  1. 转换似乎没有效果。类验证器告诉我这些属性中的每一个都不能为空。例如,如果我将“propertyone”更改为“propertyOne”,那么类验证器验证对于该属性来说是可以的,例如它会看到值。其他两个属性也一样。如果我将它们骆驼化,那么类验证器会很高兴。这是在验证发生之前转换未运行的症状吗?
  2. 这个很奇怪。当我调试和评估 TestMeRequestDto 对象时,我可以看到 simpleModel 属性包含一个包含属性名称“sometestproperty”的对象,即使 TestMeModel 的类定义有一个驼峰式“someTestProperty”。为什么 @Type(() => TestMeModel) 不尊重该属性名称的正确大小写?“test4”的值存在于该属性中,因此它知道如何理解该值并分配它。
  3. 仍然很奇怪,TestMeModel 上的“someTestProperty”属性的@IsNotEmpty() 验证没有失败,例如它看到“test4”值并感到满意,即使示例 JSON 有效负载中的入站属性名称是“sometestproperty” ,都是小写。

来自社区的任何见解和指导将不胜感激。谢谢!

0 投票
1 回答
422 浏览

nestjs - 在 class-transformer 中执行隐式转换之前获取一个值

我正在尝试将 GET 参数转换为布尔值。我正在使用带有类验证器和类转换器的 NestJS。我已经在验证器管道选项中设置enableImplicitConversion了。true

现在的问题是,GET 参数的值始终是字符串,因此隐式转换将始终将其转换为true. 我可以通过运行自定义逻辑来阻止它,但是在我可以运行任何自定义逻辑(即@Transform 装饰器)之前执行隐式转换。

有没有办法在它被转换之前获得价值?

或者,还有其他方法可以实现我想要实现的目标吗?(例如,禁用属性的隐式转换等)

0 投票
1 回答
1578 浏览

node.js - Nest.js | @Exclude() 装饰器在 POST 方法中不起作用

即使将类转换@Exclude()器库中的装饰器添加到变量中,它也会在创建对象时返回。

使用空构造函数和toPlainOnly启用属性都失败:

该怎么办?

0 投票
2 回答
800 浏览

graphql - GraphQL 中 ClassSerializerInterceptor 的 NestJS 问题

我正在尝试使用class-transformerNestJS。我正在构建一个基于 Mongoose 和 GraphQL 的 API。这就是我在我的 GraphQL 对象之一中使用 Exclude 装饰器的方式:

这是我在 UserResolver 中与ClassSerializerInterceptor一起使用的方法:

我想要做的是从这个突变用户字段中获取没有密码(在 GraphQL 对象中排除)。但不幸的是,所有字段都是空的。来自 GraphQL 游乐场的错误示例:

教师对象:

没有拦截器,一切正常(除了密码仍然可见)。任何想法我做错了什么?

0 投票
1 回答
567 浏览

javascript - how to identify a child object by class-transformer ? | Nest.js

I am trying to parse a json body to a JavaScript object with the library "class-transformer" but he doesn't recognize my child objects.

This is the json file:

There are my DTOs:

And this my line of code:

I succeeed in gettting my first object from ShopEntity but the tab shops is undefined.

0 投票
0 回答
703 浏览

nestjs - Nestjs - 验证和转换查询参数

我已经定义了一个 DTO 来验证和转换传入的查询参数。

我已经在main.ts.

但它返回错误请求错误 -skip must be an integer number使用此查询:

控制器

我不确定我在这里做错了什么。希望能在这方面得到任何帮助。

更新

ScrollingDTO是从作为节点模块安装的第三方库导入的。如果我只是将课程带入我的应用程序,那么它就可以工作。

0 投票
1 回答
122 浏览

reactjs - 具有 enableImplicitConversion 的类转换器/类验证器在 ReactJS 中无法按预期工作

我希望使用 class-transformer / class-validator 将表单值转换为 UI 中的正确类型。它适用于我的服务器应用程序,但不适用于 React。有人可以帮忙吗?

预期输出(在服务器应用程序中工作)

ReactJS 中的输出

此代码在这里工作正常:https ://codesandbox.io/s/workshere-c4wek?file=/src/index.ts:0-341

但在反应应用程序的上下文中不起作用:https ://codesandbox.io/s/not-working-q80uy?file=/src/App.tsx