新手咨询一下有关 nestjs 的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
qq309187341
V2EX    Node.js

新手咨询一下有关 nestjs 的问题

  •  
  •   qq309187341 2023-07-09 11:50:01 +08:00 2996 次点击
    这是一个创建于 827 天前的主题,其中的信息可能已经有所发展或是发生改变。
    如何过滤掉客户端传入的未在 DTO 中定义的字段?现实场景就是前端可能会传入一些我不需要的字段,我希望在 DTO 检验阶段就过滤掉了。另外出参也是一样,比如密码和盐不想返回出去,如果在业务逻辑层去写就太麻烦了。是不是可以通过 DTO 进行过滤一下?
    不知道怎么描述这个问题,百度上也没有找到对应的答案,所以在这里问一下。需要有大佬能给我解答一下。另外有没有什么 nest 群想进行学习。
    16 条回复    2023-08-07 17:46:35 +08:00
    qq309187341
        1
    qq309187341  
    OP
       2023-07-09 11:53:24 +08:00
    是我的问题,可以 class-transformer 等等去处理。
    springz
        2
    springz  
       2023-07-09 11:53:28 +08:00
    我也碰到了这个问题,但是我解决了,稍等我有空回复给你。
    dode
        3
    dode  
       2023-07-09 11:54:53 +08:00 via Android
    密码字段加个 json ignore 注解就行了,后端对象没有对应字段,前端不可能能传进来一个不存在的字段啊
    ochatokori
        4
    ochatokori  
       2023-07-09 11:58:43 +08:00 via Android
    第一个问题不知道开 whitelist 符不符合你的需求,拒绝有多余字段的请求。

    第二个问题我是通过中间件中对返回值进行数据清洗实现的,在实体类上用装饰器声明哪一些字段不能返回到前端,在数据清洗方法中检查其元信息删除不需要的字段
    qq309187341
        6
    qq309187341  
    OP
       2023-07-09 13:43:03 +08:00
    @ochatokori 大哥,第二个问题能贴一下代码么。
    qq309187341
        7
    qq309187341  
    OP
       2023-07-09 13:44:18 +08:00
    @springz 出参的方式还没有想到,好像可以在拦截器里面处理最后返回的 data 数据
    XCFOX
        8
    XCFOX  
       2023-07-09 13:47:59 +08:00
    都用 nestjs 了,直接 上 GraphQL 岂不美哉。GraphQL 出参不仅能过滤字段,还附赠强类型 API 文档,配合 CodeGen 客户端类型也省的写了。
    qq309187341
        9
    qq309187341  
    OP
       2023-07-09 13:51:14 +08:00
    @XCFOX 这个只听过名字还没有试过,入门难度大么?不过如果能 nestjs 内处理当然最后 nestjs 内的方式咯
    XCFOX
        10
    XCFOX  
       2023-07-09 14:05:22 +08:00
    对于 Nest.js 应用来说,可以使用 [Code first] 的开发模式,只需增加少量代码即可切换到 GraphQL 。
    Nest.js 内置了对 GraphQL 的一流支持,开箱即用: https://docs.nestjs.com/graphql/quick-start
    配合 CodeGen( https://the-guild.dev/graphql/codegen ),客户端强类型 API 拿来就用。
    用过 GraphQL 再也不会想回到 REST: https://www.apollographql.com/blog/graphql/basics/graphql-vs-rest/
    ksmiloLove
        11
    ksmiloLove  
       2023-07-09 14:21:08 +08:00
    @qq309187341 graphql 只是可能看起来好用罢了,都 2023 了,这家伙好不好用前人帮你都把坑踩完了,你用英语搜搜就知道到底风评如何了。
    XCFOX
        12
    XCFOX  
       2023-07-09 14:53:26 +08:00
    @ksmiloLove 2023 可以试试 tRPC( https://trpc.io/ ),比 GraphQL 要省事儿的多,代价则是牺牲了灵活性。
    dengshen
        13
    dengshen  
       2023-07-09 15:17:59 +08:00 via iPhone
    还是用 transformer 的 exclude 装饰器
    chenzhe
        14
    chenzhe  
       2023-07-09 16:11:49 +08:00
    如果是用 mikrom ,定义实体的时候可以设置 hidden:true 来让密码之类的字段平时就不读取,只有在需要做校验的时候读取。再然后也可以使用 Interceptor 来对返回的数据做结构调整。然后请求的内容用 class-validator 来做请求的 dto 字段过滤,class-transformer 用来对请求参数做类型转换或设置默认值。
    lee6789
        15
    lee6789  
       2023-07-10 14:47:20 +08:00
    入参的话,可以在 main.ts 中设置 ValidationPipe whitelist :true , 将去掉没有使用任何验证装饰器的属性的验证(返回的)对象
    qindan
        16
    qindan  
       2023-08-07 17:46:35 +08:00
    OP 解决了吗?想学习一下
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1457 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 16:45 PVG 00:45 LAX 09:45 JFK 12:45
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86