Typescript express 新手教程 S4 错误处理和客户端信息的验证
太长不看
- 介绍了错误处理中间件的使用
- 介绍了如何验证客户端发送来的信息的正确性
程序运行时一定会发生一些错误,所以要处理 error handling
- 使用错误处理中间件,这个函数的第一个参数是 error,剩下三个参数和其他中间件一样
- 向next()中传入error,就会直接忽略所有剩余路由/中间件,直接调用错误处理中间件
- 所以这个errorHandleMiddleware应该放在 中间件队列中的最后位置
- 一般封装几个 Exception 类,来规范错误信息和响应状态码
验证dto
- 首先需要dto
- 然后需要 class-validator
- 还需要 class-transformer
- 然后使用上面三个东西组合一个验证dto的中间件
提普斯
在本项目中,用到了class-validator提供的 装饰器 (@IsInt)和validate函数。
- 首先使用装饰器的时候,就把要验证的dto类的类名和每个(要验证的)成员的信息以及验证规则本身放到全局(比如global对象)上的一个由class-validator自定义的容器中
classValidatorMetadataStorage
- 然后在调用validate函数的时候,传入要使用的dto和实际接收的request请求对象中的信息,validate函数会去全局容器中找到对应名字的dto的验证规则,并对比实际请求对象中的信息是否符合验证规则
- 如果你觉得很奇怪,这种模式叫做IOC,简而言之,就是让你岁月静好,因为已经有人在扛着你负重前行。
总结
当express服务器 遇到错误的时候,需要错误处理中间件,
当遇到要验证客户端发送来的信息的时候,需要信息验证中间件。
前者使用到了express提供的next函数,但是需要注意,
当程序发生了错误,就算是没有使用next手动抛出,express也是能接受并发送给客户端(或者是logger)。
另外需要注意的一点是,一旦涉及到多方信息交互,就要本着互不信任的原则,永远进行校验,这里只是采用web服务器信息校验的例子,其他端也应该进行类似的操作。