2014-04-16 23 views
-1

我使用模块来加密/解密数据。Nodejs如何防止模块崩溃(加密)

var crypto = require('crypto'); 

function encrypt(text){ 
    var cipher = crypto.createCipher('aes-256-cbc','secret key'); 
    var encrypted = cipher.update(text.toString(),'utf8','hex') + cipher.final('hex'); 
    return encrypted; 
} 

function decrypt(text){ 
    var decipher = crypto.createDecipher('aes-256-cbc','secret key'); 
    var decrypted = decipher.update(text.toString(),'hex','utf8') + decipher.final('utf8'); 
    return decrypted ; 
} 

module.exports.encrypt = encrypt; 
module.exports.decrypt = decrypt; 

而且在我的路线加载:

var crypt = require('./middleware/encrypt'); 
var id = 10; 

var id_crypted = crypt.encrypt(id); 
console.log(id_crypted); 
var id_decrypted = crypt.decrypt(id_crypted); 
console.log(id_decrypted); 

所以这个工作正常(除了我有地穴模块中使用text.toString(),否则它崩溃..)。

问题在于解密。 我无法控制将要解密的数据(我正在将它们从cookie中取出)。

如果例如我想解密值“10”,那么我的所有应用程序崩溃,因为解密函数抛出错误的最终块长度错误。

那么,如何防止我的模块在发生错误时崩溃我的所有应用程序?

回答

-1

这应该工作

process.on('uncaughtException', function(error) { 
    console.log(error.stack); 
}); 

NodeJS docs

+0

谢谢。我需要把它放在我的app.js上? –

+0

启动脚本中的任何位置都应该这样做。建议把它放在底部,这样你就不必一直滚动它。 – leko

+0

请注意,uncaughtException是异常处理的一种非常粗暴的机制,将来可能会被删除。我不认为这是一个好的解决方案 –

0

包裹在一个try-catch块有问题的函数调用服用。