1
NessajCN 2023-08-07 14:43:20 +08:00
巧了我刚看的一个项目就是用的 dto
https://github.com/azerothcore/acore-api/blob/master/src/auth/auth.controller.ts @Post('/signin') async signIn( @Body() accountDto: AccountDto, @Res() response: Response, ): Promise<void> { return this.authService.signIn(accountDto, response); } |
2
mxT52CRuqR6o5 2023-08-07 16:13:18 +08:00
|
3
mxT52CRuqR6o5 2023-08-07 16:14:47 +08:00
@mxT52CRuqR6o5 #2 这个好像是过滤 request 的,我再找找看
|
4
quya 2023-08-07 16:34:39 +08:00
|
5
LandCruiser 2023-08-07 16:41:07 +08:00
你算是问对人了,今天刚解决这个问题,其实三楼那个就是,只不过不是一个属性。
app.useGlobalPipes( new ValidationPipe({ transform: true, whitelist: true, forbidNonWhitelisted: true, errorHttpStatusCode: HttpStatus.UNPROCESSABLE_ENTITY, exceptionFactory: (errors: ValidationError[]) => { return new UnprocessableEntityException( errors .filter((item) => !!item.constraints) .flatMap((item) => Object.values(item.constraints)) .join('; '), ); }, }), ); 这段代码放在 main.js 的 bootstrap 方法中 你自己研究下吧 |
6
nocmt 2023-08-07 19:46:27 +08:00
从数据库中查就可以直接过滤返回字段呀,比如 mongodb ,就可以填过滤参数呀。
db_users.find({"uid": 1001}, {"password": 0, "uid": 1}) |
7
xiaomimix5 2023-08-07 21:47:18 +08:00
看来用 nestjs 的还是有一些的,同用 nestjs 。
|
8
TabGre 2023-08-08 05:09:04 +08:00
你们 nestjs 应用有部署在 cloudflare or vercel 吗?
|
10
kongkx 2023-08-08 08:19:42 +08:00 via iPhone
应该是 serialization ,参考官方文档 或者看看这个
https://stackoverflow.com/questions/50360101/how-to-exclude-entity-field-from-returned-by-controller-json-nestjs-typeorm |
11
IvanLi127 2023-08-08 10:10:37 +08:00 via Android
可以做到,我之前是用响应拦截器里获取响应的对象类型,去读装饰器的标记过滤。
|
12
ochatokori 2023-08-08 10:42:57 +08:00 via Android
在实体类上用装饰器通过元信息标注哪一些字段需要过滤,在中间件中遍历响应体检查其元信息删除不需要的字段。
|
13
qq309187341 OP @ochatokori 有没有参考示例,刚入门还不是特别了解。但是你说的大致意思我明白。对于传入参数原本是通过创建自定义的管道,然后在全局进行绑定,这样就能通过 class-validator 进行 DTO 类型字段的校验。但是我不知道如何进行删除。transform(value, { metatype })只有这两个参数。value 是客户端传入的值,但是我不知道从哪里获取 DTO 类的值。原本是打算获取 DTO 的对象值,然后两个进行遍历,若 value 中的值不存在 DTO 上就删除掉。但是现在困扰在了 DTO 上的值不知道怎么获取。另外传出参数应该也是一样。能否给个示例
|
14
qq309187341 OP @kongkx 这个方式是数据库出来的时候就已经排除了。但是有些情况是我可能在服务层还需要对这些数据进行使用.我希望在返回给客户端期间,增加一个步骤,用于将返回的字段和我定义的 VO 类进行比较,然后返回 VO 类中的的字段
|
15
qq309187341 OP @IvanLi127 能否给我个示例子。刚入门,对与很多 API 或者使用方式还不太了解,了解不够深,所以有点不知道怎么处理。
|
16
kongkx 2023-08-08 11:38:50 +08:00 via iPhone
@qq309187341 #14 这个不是 数据库出来就排除的,你可以验证一下。class-transformer 只是处理 serialize 的行为,对象属性还是可以访问的
|
17
qq309187341 OP @kongkx 那我说错了,不过我更希望能够在返回阶段对数据进行处理。因为这样的话个人感觉更加灵活。请问返回阶段处理 DTO 字段的示例么?
|
18
Shamiko 2023-08-08 13:07:23 +08:00
可以像 java 一样写 VO 啊用 ClassSerializerInterceptor ,Vo 类使用 Exclude ,属性使用 Expose
|
19
Shamiko 2023-08-08 13:10:08 +08:00
|