前端Error: Digest already called报错详解(使用Node中的crypto进行MD5加密时报错)

Error: Digest already called报错详细解决方案

不是很麻烦的错误,但是却是很容易忽略掉的问题。由于之前自己的后端逻辑都是只加密新密码所以也是第一次遇到这个问题。

写在前面

前端编写修改密码页面,在使用nodecrypto模块进行MD5加密时,对old_pass(原密码)和new_pass(新密码)两个字段同时进行MD5加密时出现了该错误。

一、分析报错信息

浏览器F12报错提示报错详细显示:

浏览器F12报错提示
不难看出:它在告诉你在使用node中crypto模块进行MD5加密时多次调用了Digest方法

二、探究报错原因

查看报错信息定位到代码

可以定位到报错代码的位置:

在这里插入图片描述
代码片段如下:

  // 对密码进行MD5加密
  let md5 = crypto.createHash('md5')
  md5.update(this.passwordForm.new_password)
  const md5NewPassword = md5.digest('hex')
  // 下面的是后面需求改变的时候增加的 事实证明还是太年轻
  md5.update(this.passwordForm.old_password)
  const md5OldPassword = md5.digest('hex')

小插曲

F哥让我给原密码也加密时,我当时的想法太简单了。
(内心os:要多加密一个字段,小事情,看我直接ctrl+d 加密第二个数据,over!)
事实上,node无情给了我当头一棒!
在这里插入图片描述

通过查看官网的信息分析代码片段 Node crypto官方文档

分析:文档里说明了一个crypto实例只能调用digest一次,所以我上面的代码片段调用方法是错误的,一个实例同时调用两次digest——故而报错Error: Digest already called

三、找到解决办法

结合错误原因并改正代码

找到了代码出错的原因之后问题就很好解决了。一个crypto实例只能调用一次digest方法
改动后如下:

 // 分别创建新实例
 const crypto = require('crypto');
 let md5OldPassword = crypto.createHash('md5').update(this.passwordForm.old_password).digest('hex');
 let md5NewPassword = crypto.createHash('md5').update(this.passwordForm.new_password).digest('hex');

这样写每次调用digest方法都重新创建以个新的crypto实例

写在结尾

至此问题完美解决。感谢阅读,喜欢把自己在项目中实现功能的过程分享出来,希望对大家有些许的帮助,人非圣人,如果有不正确的地方,还烦请指正。大家平时有什么好的学习方法也可以评论区分享给我,阿里嘎多!

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值