学习 Nestjs 请教一下自定义管道不生效的问题

30 天前
 xiaohantx
core/controller/user/user.controller.ts 文件里引用了自定义的管道 ValidationPipe

但是为什么 core/pipe/validation-pipe.ts 这个管道不生效呀

if (!metatype || !this.toValidate(metatype)) { return value; }

这里两个值都是 false ,后面就不运行了,没有进行类型校验
888 次点击
所在节点    Node.js
4 条回复
EmptyDoc
30 天前
管道的正常执行流程就是要么直接返回一个值,要么就抛出异常。

你说两个值都是 false ,取反后不就将 value 返回了吗?

你预期的流程是什么?不妨开调试打个断点单步跟一下。
xiaohantx
30 天前
@EmptyDoc 就是一直是两个 false 是我疑惑的地方,参考这里 https://article.juejin.cn/post/7172343322403405854#heading-14 预期的就是我在请求是 body 的参数里数据格式与预期不符报错,比如 string 类型传成 number 类型
EmptyDoc
30 天前
@xiaohantx
你这上下文缺少的有点厉害,示例仓库居然在另一个帖子里 = =。

你控制器方法签名里,类型声明写成了 `any`,管道里获取不到元数据类型(`metatype`),所以你取到的值应该是 `undefined`,后面逻辑都不走了。
你把控制器里 body 的类型定义为 `UserCreateDto`,再试下。
xiaohantx
30 天前
@EmptyDoc 不好意思,没注意仓库没贴进来,试了一下,确实是 body 里这个类型定义的问题,改掉就跑通了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1066320

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX