热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

nestjs上的强参数

您是Nestjs和ts的新手,我正尝试使用nestjs进行用户注册,并且工作正常,dto看起来就像

您是nestjs和ts的新手,我正尝试使用nestjs进行用户注册,并且工作正常,dto看起来就像一种将数据从Web传输到nest上任何数据源的方式。

问题是我有一个具有2个字段登录名和密码的dto,而我的数据库模式具有3个登录名,密码和admin(boolean)。

如果我提出请求并验证此登录名和密码,并且它们很好,我将其保存到数据库中,直到现在都没问题。

问题是,如果我通过DTO,并且我将管理数据真实传递给数据库,那么我知道我必须负责并将其从对象中删除,但是我有点担心这是默认行为因为这很容易导致安全漏洞。

我的代码是:


let body = {
login: 'vinicius',password: 'keyboardcat',admin: 'true'
}
// DTO
class Login {
login!: string;
password!: string;
}
let data = body as Login;
console.log(JSON.stringify(data));
// => {"login":"vinicius","password":"keyboardcat","admin":"true"}
// note that the admin is on the object even so its not on DTO
// this destructuring achieves the desired behavior
const { admin,...desiredData } = body;
console.log(JSON.stringify(desiredData));
// => {"login":"vinicius","password":"keyboardcat"} // this is the desired

问题是,你们如何处理?
我的意思是,还有什么更好的方法可以做到这一点,而又不会与每个人使用的默认DTO有太大的偏差?



我认为这就像使用@IsBolean装饰器向类添加参数一样简单

@IsBoolean()
public admin!: boolean;

也许您可以看看类验证器documentation,这是NestJS用来定义DTO的库

编辑:有了您在问题中所做的更改,我现在完全理解DTO部分中的内容,您无法执行计划的工作,因为它就像DTO中操作的蓝图一样,您可以进行一些形式的更改像在操作之前解析字符串或将嵌套对象转换为特定类之类的主体中,根据要添加的复杂性,您可以有两种方法:对象解构(示例中的一种)或创建自定义管道进行了这种转换,我建议您使用解构,但我看不到任何问题。


推荐阅读
  • sping AOP核心思想及实现原理
    核心思想aop的核心思想是目标对象初始化后创建其代理对象(cglib、jdk)。代理对象执行方法时走MethodInterceptor的invoke拦截 ... [详细]
  • 实例化具有无参数构造函数的泛型对象newInstance()methodneedconstructorwithoutparameterClasscomeformClass ... [详细]
  • 数据库的拓展名有多少种,如何识别四种模糊数据库指能够处理模糊数据的数据库。一般的数据库都是以二直逻辑和精确的数据工具为基础的,不能表示许多模糊不清的事情。随着模糊数学理论体系的建立 ... [详细]
  • 开发笔记:GraphQL安全指北
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了GraphQL安全指北相关的知识,希望对你有一定的参考价值。*在616先知白帽 ... [详细]
  • OpenFire源码学习之九:OF的缓存机制
    关于缓存,openfire存储到了本地JVM中。本人认为这样并不是很好。以后会讲一篇Redis的缓存。实际应用中,本人讲openfire诸多缓存内容放置了redis中。这里就看看openfi ... [详细]
  • Java基础——泛型与集合
    第八章泛型与集合第一节泛型定义:泛型是JavaSE1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这 ... [详细]
  • 看到平台银行对接方案写的demo确实还不错记个笔记互相学习学习packageapiimport(cryptotlsnetnethttpstringssynct ... [详细]
  • 四十九、进程间通信——SystemVIPC之消息队列
    49.1SystemVIPC介绍49.1.1SystemVIPC概述UNIX系统存在信号、管道和命名管道等基本进程间通讯机制SystemV引入了三种高级进程间通信机制消息队列、共享 ... [详细]
  • 容器和类型推演scala为Java的泛型容器提供类型推演和类型安全型。在scala中,import语句中的下划线,等价于Java里的星号(*)。如果下划线不是跟在包名后, ... [详细]
  • 当我尝试从.Rmd文件创建pdf时,出现以下错误:***caughtsegfault***address0x110,cause ... [详细]
  • 1、set自动注入bean有个属性autowireautowire”byType”自己去找对应的注入。也就是把原来的 ... [详细]
  • 题意:有一个N个字符串(N≤1000,N为偶数)的集合,要求找一个长度最短的字符串(可不在集合内)S,使得集合中恰好一半的串小于等于S,另一半大于S。如果有多解,要求输出字典序最小的解。解法:本来 ... [详细]
  • 【漏洞分析】CVE20179765:深入分析一个影响数百万IoT设备的漏洞(含演示视频)
    【漏洞分析】CVE20179765:深入分析一个影响数百万IoT设备的漏洞(含演示视频) ... [详细]
  • ylbtechLanguageSamplesEvents(事件)
    ylbtech-Microsoft-CSharpSamples:ylbtech-LanguageSamples-Events(事件)1.A,示例(Sample)返回顶部“事件”示例 ... [详细]
  • 开发笔记:Struts面试题
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Struts面试题相关的知识,希望对你有一定的参考价值。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有