【问题标题】:Nodejs how to prevent a module from crashing (crypto)Nodejs如何防止模块崩溃(加密)
【发布时间】:2014-05-31 06:36:01
【问题描述】:

我使用一个模块来加密/解密数据。

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);

所以这很好用(除非我必须在 crypt 模块中使用 text.toString() 否则它会崩溃..)。

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

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

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

【问题讨论】:

    标签: node.js error-handling module


    【解决方案1】:

    这应该可以工作

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

    取自NodeJS docs

    【讨论】:

    • 谢谢。我需要将它放在 app.js 的哪个位置?
    • 启动脚本中的任何地方都应该这样做。建议把它放在底部,这样你就不用一直滚动了。
    • 请注意,uncaughtException 是一种非常粗糙的异常处理机制,将来可能会被删除。我认为这不是一个好的解决方案
    【解决方案2】:

    将有问题的函数调用包装在 try-catch 块中。

    【讨论】:

      猜你喜欢
      • 2017-01-26
      • 2021-04-19
      • 2011-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-15
      相关资源
      最近更新 更多