使用类转换器将字符串化的 JSON 转换为对象

2024-06-18

有一个 Nest.js 项目,在请求正文中我们期望一个对象,该对象的一个​​属性包含字符串化的 JSON 值。这个想法是将这个字符串转换为一个对象,验证它并作为对象传递给控制器 ValidationPipe 设置:

app.useGlobalPipes(
  new ValidationPipe({
   whitelist: true,
   transform: true,
  }),
);

DTO:

@Transform(parseJson, { toClassOnly: true })
@Type(() => AdditionalInfo)
@IsNotEmptyObject()
@ValidateNested()
additionalInfo: AdditionalInfo;

parseJson 函数

export function parseJson(options: {
  key: string;
  value: string;
  obj: string | Record<string, any>;
}): Record<string, any> {
  try {
    return JSON.parse(options.value);
  } catch (e) {
    throw new BadRequestException(`${options.key} contains invalid JSON `);
  }
}

由于某种原因,在控制器中解析的值丢失了,我们收到一个空对象。


好像@Transform仅适用于基元。 决定创建ParseJsonPipe并使用它来代替。 用法(在控制器中):

@Body('additionalInfo', new ParseJsonPipe(), new ValidationPipe(AdditionalInfoDto)) additionalInfo: AdditionalInfo,

解析JsonPipe:

import { ArgumentMetadata, BadRequestException, Injectable, PipeTransform } from '@nestjs/common';

@Injectable()
export class ParseJsonPipe implements PipeTransform<string, Record<string, any>> {
  transform(value: string, metadata: ArgumentMetadata): Record<string, any> {
    const propertyName = metadata.data;
    try {
      return JSON.parse(value);
    } catch (e) {
      throw new BadRequestException(`${propertyName} contains invalid JSON `);
    }
  }
}

ValidationPipe实施PipeTransform from @nestjs/common, transform函数看起来像这样:

async transform(value: any): Promise<any> {
    if (!this.metaType) { // AdditionalInfoDto
      return value;
    }
    const object = plainToClass(this.metaType, value);
    const errors = await validate(object);
    if (errors.length > 0) {
      const message = this.getErrorMessages(errors);
      throw new BadRequestException({ message });
    }
    return value;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用类转换器将字符串化的 JSON 转换为对象 的相关文章

  • NestJs使用连接表更新多对多关系

    我有两个实体 财产和所有者 一处房产可以有很多业主 业主也可以有很多房产 对于连接 请使用 property owner 表 如何使用 NestJS TypeORM 更新这种多对多关系 Entity property export clas
  • 通过 Nestjs 从 url 下载图像

    我想从电报帐户下载用户个人资料图片 并使用 Nestjs 框架将其存储在本地存储中 Controller export class Controller constructor private readonly httpService Ht
  • 装饰器在 Nest 控制器中返回 404

    我正在使用 NestJS 开发后端 顺便说一句 这很棒 我有一个 标准获取实体情况的单个实例 类似于下面的示例 Controller user export class UserController constructor private
  • 如何使用 Jest 单元测试覆盖 TypeORM @Column 装饰器?

    我希望尽可能多地对我的应用程序进行单元和端到端测试 我的目标是覆盖率达到 101 我的设置现在的问题是 typeorm 的 Column 装饰器使用箭头函数来设置默认值 例如数据库更新的当前时间戳 这个箭头函数没有被玩笑测试覆盖 消息是 s
  • NestJs中带有多个参数的@Get DTO

    我正在尝试在 NestJS 中创建一个可通过 GET HTTP 请求访问的控制器操作 该请求接收两个参数 但由于某种原因它们未定义 如何修复它 Get login login Param params LoginUserDto consol
  • 如何将 Nest.js 微服务拆分为单独的项目?

    假设我想创建一个简单的影院管理平台 它需要很少的微服务 movies cinemas payments etc 你会如何在 Nest js 中做到这一点 我不希望它们位于同一个大文件夹中 因为这感觉就像制作一个整体 我希望它们成为单独的 N
  • 访问验证管道中的请求对象

    我正在尝试访问Request object从一个内Validation Pipe in nestjs 为了验证某些字段的唯一性 我需要ID UUID提供的参数PUT PATCH请求 数据结构本身不可用 任何想法 目前 根本不可能在 a 中访
  • 如何在 NestJS 中获取发起(前端)请求的域

    我的问题类似于以下内容 如何在express js 中获取发起请求的域 https stackoverflow com questions 18498726 how do i get the domain originating the r
  • Docker CI 无法与 mongodb-memory-server 一起使用

    我使用 mongodb memory server 测试了 mongo 中的一些存储库功能 并在本地计算机上成功运行了单元测试 但是当将此代码推送到 GitHub 时 它运行失败 我不确定问题是关于 docker 配置还是关于 mongod
  • Nest JS构建不会生成dist文件夹

    我已经用nest js实现了rest api项目 它在本地环境中运行良好 pm start 我想构建并部署它 但构建命令不会生成dust文件夹 以下是我的配置 tsconfig json compilerOptions module com
  • Nest.js Google Login(passport.js) 与 SPA 前端(React)

    在我的全栈项目 Nest js React 中 我使用护照谷歌实现了谷歌登录 如下所示 import Controller Get Req UseGuards from nestjs common import AppService fro
  • NestJS 无法解析 UsersModule 的依赖关系

    NestJS 无法解析 UsersModule 的依赖关系 错误 错误 Nest 无法解析 UsersModule 的依赖关系 请 验证 0 参数在当前上下文中是否可用 应用程序模块 ts Module imports ConfigModu
  • NestJS e2e 测试模拟会话装饰器

    我正在尝试使用 supertest 编写一个 e2e 测试 其中我的控制器实际上使用了 Session 装饰师 然而 我不想承担使用数据库连接等启动会话的全部负担 因此测试中的我的应用程序实际上并未初始化会话 相反 我想首先模拟掉装饰器提供
  • 将异步事件监听器与 Nestjs EventEmitter 模块和无服务器函数结合使用

    我正在尝试在 Nestjs EventEmitter 模块的帮助下实现具有无服务器 lambda 函数的异步工作线程 处理程序在发出事件时被调用 但该函数在 async await 调用之前关闭 我尝试过同时使用emit and emitA
  • 类验证器 (Node.js) 在自定义验证中获取另一个属性值

    目前 我有一个非常简单的类验证器文件 其中包含 Nest js 中的 ValidationPipe 如下所示 import IsDateString IsEmail IsOptional IsString Length Max from c
  • NestJS 中的 FileInterceptor 和 Body 问题(在请求中上传文件和数据)

    我有以下控制器 createCollection UploadedFile file Body createCollectionDto CreateCollectionDto GetUser user User Promise
  • 如何从控制器返回 PDF 文件

    我正在尝试使用 NestJs 从控制器端点返回 PDF 文件 未设置时Content typeheader 返回的数据getDocumentFile 很好地返回给用户 然而 当我添加标头时 我得到的返回似乎是某种奇怪形式的 GUID 响应总
  • 如何获取数组作为 GraphQL 解析器的输入

    我想得到一个字符串数组ids查询变量中的参数并在我的解析器中使用它 下面是我的代码 People resolver ts import Resolver Query Mutation Args from nestjs graphql imp
  • 如何在 NestJS 中跨模块全局注入价值?

    我正在使用 nx 工作区和 Nestjs 我想在 Nestjs 应用程序的多个模块中注入一个值 最终目标是重现类似的配置管理方式Angular 中提到的 vsavkin https github com nrwl nx issues 208
  • 使用类转换器将字符串化的 JSON 转换为对象

    有一个 Nest js 项目 在请求正文中我们期望一个对象 该对象的一个 属性包含字符串化的 JSON 值 这个想法是将这个字符串转换为一个对象 验证它并作为对象传递给控制器 ValidationPipe 设置 app useGlobalP

随机推荐

  • 什么是 Makefile.am 和 Makefile.in?

    这两个文件多出现在开源项目中 它们的用途是什么 它们如何工作 Makefile am是程序员定义的文件 由automake生成Makefile in文件 am代表autom阿克 这configure通常在源 tarball 中看到的脚本将使
  • 具有多种布局的 React Router v4

    我想在我的公共布局中渲染一些路线 并在我的私人布局中渲染一些其他路线 有没有一种干净的方法可以做到这一点 显然不起作用的示例 但我希望大致解释我正在寻找的内容
  • 在 Repository 类中观察 Forever 是一个好习惯吗?数据库+网络分页列表

    我正在按照架构指南构建应用程序 实现了房间数据库缓存 网络 需要从单独的实体获取最新页码 我的型号 Entity tableName top rated movie page public class Top Rated Movies Pa
  • 使用 Apache Spark 读取 JSON - `corrupt_record`

    我有一个json file nodes看起来像这样 toid osgb4000000031043205 point 508180 748 195333 973 index 1 toid osgb4000000031043206 point
  • 在 Nestjs 的我的模块中导入另一个模块的存储库

    我正在尝试使用 Nestjs 构建一个应用程序 目前我有两个模块 用户和身份验证 其结构如下 我需要注射用户服务 into 认证服务为了与User实体 所以首先我注入了用户存储库 into 用户服务并导出服务 用户 模块 ts import
  • SolrNet:尝试添加和提交时 SolrConnectionException (400) 错误请求

    我已经到了 SolrNet 执行 Add 方法的地步 但是当我尝试 Commit 时 我收到了错误 以下是我的 schema xml 模型 调用它的代码以及我得到的错误 更奇怪的是 尽管出现错误 但在我重新启动 Tomcat 后 该模型仍会
  • MFENCE/SFENCE/etc“序列化内存但不序列化指令执行”?

    英特尔系统编程指南第 8 3 节中有关 MFENCE SFENCE LFENCE 的说明 以下指令是内存排序指令 而不是序列化指令 这些指令会耗尽数据内存子系统 它们不序列化指令执行流 我试图弄清楚为什么这很重要 在多线程代码中 对内存的写
  • DI Control-Freak 反模式:难以理解

    我正在阅读 Mark Seemann 写的 NET 中的依赖注入 但我无论如何也无法理解这一点 虽然new当涉及到 VOLATILE 时 关键字是一种代码味道 依赖性 您无需担心将其用于稳定 依赖性 这new一般来说 关键字不会突然变得 非
  • 线性空白到底是什么? (LWS/LWSP)

    我看到提到了这个术语 还有 CRLF CR LF CTL 控制字符 和 SP 空格 如果它不是常规的内联空格 那么它是什么字符 From STD68 语法规范的增强 BNF ABNF http www rfc editor org std
  • 如何在 django-rest-framework 查询集响应中添加注释数据?

    我正在为查询集中的每个项目生成聚合 def get queryset self from django db models import Count queryset Book objects annotate Count authors
  • MPMediaItemPropertyAssetURL 仅针对 iPhone 5s 返回 null

    我一直在使用以下代码从 MPMediaItemPickerController 返回的 MPMediaItem 对象中提取资产 url 以便我可以将音乐文件从用户 iPhone itunes 音乐库复制到文档文件夹进行处理 但在 iPhon
  • 将密度曲线拟合到 R 中的直方图

    R中有没有可以将曲线拟合到直方图的函数 假设您有以下直方图 hist c rep 65 times 5 rep 25 times 5 rep 35 times 10 rep 45 times 4 看上去很正常 但其实是歪曲的 我想拟合一条倾
  • React:在哪里扩展对象原型

    我使用创建了一个纯 React 应用程序创建反应应用程序 https github com facebookincubator create react app 我想延长String类并在一个或多个组件中使用它 例如 String prot
  • 关于CSRF的问题

    在 cookie 中使用信号身份验证令牌进行身份验证是否安全 通过 ajax 仅发布和请求 json 为什么攻击者无法获取隐藏字段中的表单令牌 攻击者如何通过 POST 请求进行 CSRF 攻击 在 cookie 中使用单个令牌进行身份验证
  • 如何用awk删除以“C”开头的行?

    如何使用以下命令从文本文件中删除以 C 开头的行awk 有什么建议请 如果数据在文件中data txt then With awk awk C data txt With grep grep v C data txt 显示开头不带 C 的所
  • 在单页应用程序上重用 Google Maps API 实例

    假设我有一个单页应用程序 Angular JS 应用程序 并且我在元素 id 上绘制一个 Google 地图实例googleMap var mapInstance new google maps Map document getElemen
  • PHP 在数组内循环

    我怎样才能在一个内部循环array在我的代码中 这是我的脚本的静态版本 val array array value gt Male label gt Male array value gt Female label gt Femal my
  • jQuery 使用 Next 设置选定选项

    如何使用 jQuery 将已选定项目的 下一个 项目设置为 选定 例如 如果我有
  • 是否可以为单个节点添加多个位置并且 solr 可以显示搜索的所有位置?

    场景 假设您在多个位置有一个产品 当您搜索该产品 而不是位置 时 您应该看到所有位置 在 Drupal 中 您可以使用多值字段来表示位置 但在 solr 中我不知道 当使用 solr 对产品进行索引时 您不应该仅发送一次 例如 3 次 并将
  • 使用类转换器将字符串化的 JSON 转换为对象

    有一个 Nest js 项目 在请求正文中我们期望一个对象 该对象的一个 属性包含字符串化的 JSON 值 这个想法是将这个字符串转换为一个对象 验证它并作为对象传递给控制器 ValidationPipe 设置 app useGlobalP