问题标签 [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 回答
1651 浏览

javascript - CommandHandler 未发现命令有效负载异常

我尝试使用命令 DTO,但无法识别他的处理程序。当我记录 DTO 时,它是一个{...}没有CreateUserCommand签名的简单对象。

这是我的控制器:

我得到以下输出:

当我尝试直接使用它正在工作的命令时:

以下输出:

是否可以使用 DTO 作为命令处理程序?

0 投票
1 回答
4694 浏览

angular - plainToClass 重载选择导致类型错误

我正在做一个有角度的项目。大部分代码不是我的,但我需要编译它。

虽然以下示例在一台机器上编译,但它会在其他机器上生成错误。

我在运行时遇到的错误ng build如下:

myObject被声明为any但包含一个数组。如果我按如下方式更改代码,它就可以工作。

问题是相同的方法分散在整个项目中。

我想知道为什么同一段代码在一台机器上运行,而在另一台机器上却不行。

在两台机器(相同package.json)上,使用了 0.2.0 版的 class-transformer。

似乎在一台机器上拾取了该方法的一个重载,但在另一台机器上却没有。这发生得相当随机。

有没有办法在全球范围内解决这个问题?

0 投票
1 回答
139 浏览

json - 角度并将 json 数据转换为真实对象(反之亦然)

为了简单起见:

我在 typescript 中定义了具有方法和属性的类(具有很多 getter/setter 逻辑)。然后我检索与此类类匹配的 json 数据。我需要能够将这些 json 对象投影到我的“智能”类中。我知道类转换器,但我想知道这是否真的是做这类事情的首选方法。此外,我打算使用ngrx,所以整个类转换看起来是错误的(服务器到json,json到状态,状态到类?反之亦然?我只是没有看到一个清晰的模式。

任何清晰度表示赞赏。谢谢!

0 投票
1 回答
3043 浏览

javascript - NestJS 为不同用户角色排除字段的策略?

假设我有一个基本实体 ,ShopsEntity它有一堆字段和一个秘密属性:

我不希望秘密属性被序列化,除非用户具有通过Nest Access Control定义的某个角色(该模块只允许将 RoleGuards 放置在解析器本身上,这意味着我需要每个角色不同的路由)。

因此,在向具有不同身份验证级别的同一端点发出请求后,管理员将获得:

一个普通的查询用户会得到:

是否有一种声明性方式可以在这里进行属性级安全性,或者最好的解决方案是为每个安全性级别提供单独的 DTO?

0 投票
3 回答
11663 浏览

typescript - 请求正文中的布尔参数在 NestJS api 中始终为真

在我的 API 中考虑这个端点:

设置为parameters参数的请求正文包含一个称为布尔类型的属性,它在参数 DTOlaserMode上像这样进行验证:

现在奇怪的是,当从 PostMan 发送请求时:

  1. laserMode = false
  2. laserMode = cool(布尔值以外的字符串)

我注意到它laserMode总是设置为 true,这是在验证过程完成之后,因为当我console.log类的构造函数中的 Parameter 实例时

没看到楼盘!

注意:当laserMode从请求中删除时,返回预期的验证错误(应该定义,应该是布尔值)。

  • 检查拼写错误
  • 使用 Vue 应用程序而不是邮递员时会注意到相同的结果。所以!!?
0 投票
1 回答
1500 浏览

typescript - 巢穴.js。在将在服务中使用之前转换(序列化)客户端数据的位置

我应该在哪里转换来自客户的收入数据以使用 service.ts 文件中的转换值。

例如,我从客户端获取 JSON 数据,如下所示

我有一个register-client.dto文件:

我有一个client.controller.ts文件:

我有一个client.service.ts文件:

create我可以在服务文件的内部方法中这样做: const clearPhone = phone.replace(/[^0-9]/gim, '').

但我希望该phone字段自动转换和验证。@Transform也许我可以使用包中的装饰器在 dTO 文件中执行此操作class-transform

0 投票
2 回答
14229 浏览

nestjs - NestJS:如何在@Query 对象中转换数组

我是 NestJS 的新手,我正在尝试从查询参数中填充过滤器 DTO。

这是我所拥有的:

询问:

本地主机:3000/api/checklists?stations=114630,114666,114667,114668

控制器

DTO

有了这个,类验证器不会抱怨,但是,在过滤器对象中,站实际上不是一个数组,而是一个字符串。

我想将其转换为验证管道中的数组。我怎样才能做到这一点?

0 投票
0 回答
1062 浏览

nestjs - 类转换器和类验证器:在类验证器错误中显示 @exposed 名称

我有一个 NestJS 项目,其中我同时使用类验证器和类转换器,并且我需要在类验证器引发错误之前执行类转换器。

给定以下课程:

我需要使用属性名称而不是属性 profileName 来公开错误,其他属性也是如此。

有什么直接的想法来管理这个吗?不能要求前端向我发送具有不同名称的属性,这就是我需要调整它们的原因。

我想通过管道这样做,但在错误爆发之前无法使用它。

当前错误格式:

所需的错误格式:

0 投票
2 回答
5997 浏览

javascript - 如何使用 NestJS 正确设置序列化?

我开始在一个新的 NestJs 项目中工作,但是当我尝试实现序列化时遇到了一个问题。我想在网络响应中发送对象之前实现序列化以转换对象。我的项目工作正常,但是当我尝试在控制器中实现ClassSerializerInterceptor时,出现以下错误:

我更改了ClassSerializerInterceptor的范围以解决问题,但错误仍然存​​在。根据文档,我需要在控制器中使用拦截器并在实体中使用相应的装饰器来实现序列化。我的序列化实现如下:

帐单-statement.controller.ts

billing-statement.entity.ts

我不知道我做错了什么或错误的根源是什么。

0 投票
1 回答
1671 浏览

class-validator - 为什么我们在使用 class-transformer 时不应该使用 enableImplicitConversion?

转换器文档说:

隐式类型转换
注意如果您将类验证器与类转换器一起使用,您可能不想启用此功能。

为什么不?

我做了一些测试,没有发现任何问题。
实际上是相反的:使用class-transformer(withenableImplicitConversion=truereflect-metadata)与class-validator结合似乎是一个完美的选择,并且NestJS开箱即用地支持它