2015-08-06 7 views
1

Мое приложение получает кодированное значение base64, которое также зашифровывается. Данные могут иметь несколько разных способов, поэтому я хотел создать цепочки, способные сохранить код чистым и модульным.Функции цепочки JavaScript, последние методы возвращают 'undefined'

Я хочу уметь писать: decryptionChain.decodeBase64 (b64Value) .stringToBuffer(). FinallyDecrypt();

Когда я запускаю код, последний метод свойства «finallyDecrypt» возвращается как неопределенный.

Почему метод «finallyDecrypt» возвращается как неопределенный? Все остальное работает, и если я запускаю ecryptionChain.decodeBase64 (b64Value) .stringToBuffer(), я возвращаю Buffer, которого я ожидаю. Это происходит только тогда, когда 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; 

    } 
}; 
+0

Пожалуйста, не делайте этого. С предлагаемым дизайном можно легко вызвать 'decryptChain.stringToBuffer(). DecodeBase64 (b64Value)' или 'decryptChain.finallyDecrypt(). FinallyDecrypt()', который просто не имеет смысла. Сделайте каждый метод возвратом другого объекта. – Bergi

+0

Хммм на основе данных, которые должны работать. Можете ли вы предоставить пример [jsfiddle] (http://jsfiddle.net)? – EvilZebra

+0

Его node.js, Fiddle не поддерживает его. Не уверен, есть ли скрипт как служба для узла. Быстрый поиск в Google не превратил ничего, что действительно сработало. – Cyph

ответ

0

Из кода показано, я заметил некоторые issues.First:

decryptionChain = decryptChain Если его просто опечатка в вопросе, то пренебрежение, если его нет, пожалуйста, обратитесь к этому.

Пожалуйста, используйте var, чтобы уменьшить возможности ошибок области или «ограниченные переменные», оставленные позади.

Во-вторых, не используйте string as a Boolean.

В-третьих, вы, кажется, есть проблема с return value && value.type === 'Buffer' ? new Buffer(value.data) : value;, пожалуйста, назначить до возвращения (не обязательно, но проще)