nodejs给密码加密 报错 ,找bug全过程。
一、使用md5对密码加密
1.1 将加密内容抽取为独立文件:
1.2 在组件中使用md加密:
1.3 上图对密码加密是封装成中间件的,所以还要在路由中使用该中间件:
1.4 使用postman发起请求:(报错)
1.5 对错误进行处理:
- 以为是md5加密的方法错了,但是看网上都是这样子加密的,,实在是不知道哪里错了。。
- 通过debug来排查错误,没查出来。。。
- 决定换一种加密方法,下面使用bcrypt进行加密。
二、使用bcrypt对密码进行加密
2.1 加密方法:
2.1 还是报错,这是想单独执行一下加密文件,先确定一下是加密逻辑的错误还是其他逻辑错误。
- 结果:两种加密方法都运行成功!!!好吧,原来加密逻辑没有错!
- 虽然证明md5本身没有问题,省的换来换去,还是接着使用bcrypt进行加密了。
2.2 突然想起,感觉应该使用异步操作,对于获取加密后的 密码, 然后就将加密内容换成异步的了:(en~我可太缺乏探索精神了555,没有深究是否必须要异步)
2.3 在页面中确实可以拿到加密后的密码,但是,还是报错500!
- 下面是密码加密的中间件:
- 为什么使用一堆 console.log来调试,而不用debug呢——因为debug总是走不到我希望它进入的那一步【冒冷汗】~~~
2.4 至此,在上图中每一步都可以获得加密后的密码,但是,发起请求还是500!!!
三、一步步回溯,顺着代码倒推
- 项目中采用分层架构,代码逻辑是一层层嵌套的。决定一层层刨析!!!【真~洋葱模型~~】
- 代码结构如下图:
- 下面对第5步代码进行分析:
- 突然想起来,加密后的密码!变长了!!!MySQL中密码字段长度不够!!!
- 加长密码长度,成功了!!!
四、总结
1. 还有一些细节上的坎坎坷坷,这里没有写。最主要的原因也并非字段长度不够。因为前面在抽离的加密函数和 加密中间件之间一直没打通。打通之后意识到字段不够也就是顺藤摸瓜了。
2. 不过,还是得缕清逻辑,写想清楚再下手。