1
qq309187341 OP 是我的问题,可以 class-transformer 等等去处理。
|
2
springz 2023-07-09 11:53:28 +08:00
我也碰到了这个问题,但是我解决了,稍等我有空回复给你。
|
3
dode 2023-07-09 11:54:53 +08:00 via Android
密码字段加个 json ignore 注解就行了,后端对象没有对应字段,前端不可能能传进来一个不存在的字段啊
|
4
ochatokori 2023-07-09 11:58:43 +08:00 via Android
第一个问题不知道开 whitelist 符不符合你的需求,拒绝有多余字段的请求。
第二个问题我是通过中间件中对返回值进行数据清洗实现的,在实体类上用装饰器声明哪一些字段不能返回到前端,在数据清洗方法中检查其元信息删除不需要的字段 |
5
qq309187341 OP 入参过滤已经实现了,但是出参对过滤还没有思路
|
6
qq309187341 OP @ochatokori 大哥,第二个问题能贴一下代码么。
|
7
qq309187341 OP @springz 出参的方式还没有想到,好像可以在拦截器里面处理最后返回的 data 数据
|
8
XCFOX 2023-07-09 13:47:59 +08:00
都用 nestjs 了,直接 上 GraphQL 岂不美哉。GraphQL 出参不仅能过滤字段,还附赠强类型 API 文档,配合 CodeGen 客户端类型也省的写了。
|
9
qq309187341 OP @XCFOX 这个只听过名字还没有试过,入门难度大么?不过如果能 nestjs 内处理当然最后 nestjs 内的方式咯
|
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/ |
11
ksmiloLove 2023-07-09 14:21:08 +08:00
@qq309187341 graphql 只是可能看起来好用罢了,都 2023 了,这家伙好不好用前人帮你都把坑踩完了,你用英语搜搜就知道到底风评如何了。
|
12
XCFOX 2023-07-09 14:53:26 +08:00
@ksmiloLove 2023 可以试试 tRPC( https://trpc.io/ ),比 GraphQL 要省事儿的多,代价则是牺牲了灵活性。
|
13
dengshen 2023-07-09 15:17:59 +08:00 via iPhone
还是用 transformer 的 exclude 装饰器
|
14
chenzhe 2023-07-09 16:11:49 +08:00
如果是用 mikrom ,定义实体的时候可以设置 hidden:true 来让密码之类的字段平时就不读取,只有在需要做校验的时候读取。再然后也可以使用 Interceptor 来对返回的数据做结构调整。然后请求的内容用 class-validator 来做请求的 dto 字段过滤,class-transformer 用来对请求参数做类型转换或设置默认值。
|
15
lee6789 2023-07-10 14:47:20 +08:00
入参的话,可以在 main.ts 中设置 ValidationPipe whitelist :true , 将去掉没有使用任何验证装饰器的属性的验证(返回的)对象
|
16
qindan 2023-08-07 17:46:35 +08:00
OP 解决了吗?想学习一下
|