为什么这段代码中的 finallyDecrypt 方法未定义?
Why is the finallyDecrypt method in this code undefined?
我的应用收到一个 base64 编码值,该值也被加密。数据可以有几种不同的方式,所以我想创建可链接的方法来保持代码的整洁和模块化。
我希望能够写:decryptionChain.decodeBase64(b64Value).stringToBuffer().finallyDecrypt();
当我运行代码时,最后属性方法"finallyDecrypt"returns为undefined。
为什么“finallyDecrypt
”方法返回为未定义?其余的一切正常,如果我 运行 encryptionChain.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;
}
};
链接的工作原理是从每个方法返回 this
(指向 decryptionChain
对象)。
stringToBuffer
,然而,returns myBuffer
,所以你试图在那个缓冲区上调用一个名为 finallyDecrypt
的方法(它没有那个方法,因此出现错误)。
如果您希望它与链接一起使用,请使用类似于您处理 currentValue
:
的方式
stringToBuffer : function() {
...
this.myBuffer = myBuffer;
return this;
},
finallyDecrypt : function() {
if (this.myBuffer) {
...
}
}
stringToBuffer() 函数 return 是一个缓冲区(或者如果 this.currentValue 为假,它可能 return 什么都没有)。您尝试调用的函数不在 Buffer 中,它在 decryptionChain 中,因此当您尝试调用 Buffer 上不存在的函数时,它会告诉您它未定义。
注意在 decodeBase64() 中,您存储 this.currentValue 然后 return 这个。这就是下一条链起作用的原因,因为解密链对象正在 returned.
所以 stringToBuffer() 可以将其结果存储在 this.bufferedResult 中,然后 stringToBuffer() 可以 return 这个。
我的应用收到一个 base64 编码值,该值也被加密。数据可以有几种不同的方式,所以我想创建可链接的方法来保持代码的整洁和模块化。
我希望能够写:decryptionChain.decodeBase64(b64Value).stringToBuffer().finallyDecrypt();
当我运行代码时,最后属性方法"finallyDecrypt"returns为undefined。
为什么“finallyDecrypt
”方法返回为未定义?其余的一切正常,如果我 运行 encryptionChain.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;
}
};
链接的工作原理是从每个方法返回 this
(指向 decryptionChain
对象)。
stringToBuffer
,然而,returns myBuffer
,所以你试图在那个缓冲区上调用一个名为 finallyDecrypt
的方法(它没有那个方法,因此出现错误)。
如果您希望它与链接一起使用,请使用类似于您处理 currentValue
:
stringToBuffer : function() {
...
this.myBuffer = myBuffer;
return this;
},
finallyDecrypt : function() {
if (this.myBuffer) {
...
}
}
stringToBuffer() 函数 return 是一个缓冲区(或者如果 this.currentValue 为假,它可能 return 什么都没有)。您尝试调用的函数不在 Buffer 中,它在 decryptionChain 中,因此当您尝试调用 Buffer 上不存在的函数时,它会告诉您它未定义。
注意在 decodeBase64() 中,您存储 this.currentValue 然后 return 这个。这就是下一条链起作用的原因,因为解密链对象正在 returned.
所以 stringToBuffer() 可以将其结果存储在 this.bufferedResult 中,然后 stringToBuffer() 可以 return 这个。