我的应用收到一个同样经过加密的 Base64 编码值。数据可以通过几种不同的方式出现,因此我想创建可链接的方法来保持代码的整洁和模块化。
我希望能够编写:decryptionChain.decodeBase64(b64Value).stringToBuffer().finallyDecrypt();
当我运行代码时,最后一个属性方法“finallyDecrypt”返回未定义。
为什么“finallyDecrypt”方法返回为未定义?其余的一切都有效,如果我运行 ecryptionChain.decodeBase64(b64Value).stringToBuffer() 我会得到我期望的缓冲区。只有当finallyDecrypt被链接时我才会出错。
这是代码:
function decrypt(encrypted) {
var decipher = crypto.createDecipheriv(algorithm, password, iv);
decipher.setAuthTag(encrypted.tag);
var dec = decipher.update(encrypted.content, 'hex', 'utf8');
dec += decipher.final('utf8');
return dec;
}
var decryptionChain = {
currentValue:"",
decodeBase64: function (encryptedValue){
this.currentValue = new Buffer(encryptedValue.toString(), "base64");
return this;
},
stringToBuffer: function() {
if (this.currentValue) {
myBuffer = JSON.parse(this.currentValue, function (key, value) {
return value && value.type === 'Buffer'
? new Buffer(value.data)
: value;
});
}
return myBuffer;
},
finallyDecrypt : function(myBuffer){
if(myBuffer){
decrypt(myBuffer);
}
return this;
}
};
最佳答案
从显示的代码中,我发现了一些问题。首先:
decryptionChain
!= decryptChain
如果这只是问题中的拼写错误,请忽略,如果不是,请参阅。
请使用var减少范围错误或“范围变量”被遗漏的可能性。
第二,不要使用 string as a Boolean .
第三,您似乎对return value && value.type === 'Buffer' ? new Buffer(value.data) : value;
有疑问。 ,请在返回前赋值(不是必须的,但是更简单)
关于JavaScript 链接函数,最后一个方法返回 'undefined',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31863701/