console.log和错误不打印

时间:2017-08-07 14:50:53

标签: javascript node.js

我有一个加密文件的脚本,但我想打印一个console.log();在加密后。我尝试了以下但它没有用:

var figlet = require('figlet');
var encryptor = require('file-encryptor');
var crypto = require('crypto');
var CryptoJS = require("crypto-js");
var node_cryptojs = require('node-cryptojs-aes');

figlet('ZaCrypt', function(err, data) {
    if (err) {
        console.log('Something went wrong...');
        console.dir(err);
        return;
    }
    console.log(data)
});

var message = "Zaseth is my bff";
var key = encrypted_json_str;
var options = {
    algorithm: 'blowfish'
};

// Encrypt message
var r_pass = crypto.randomBytes(128);
var r_pass_base64 = r_pass.toString("base64");
var CryptoJS = node_cryptojs.CryptoJS;
var JsonFormatter = node_cryptojs.JsonFormatter;

var encrypted = CryptoJS.AES.encrypt(message, r_pass_base64,
{
    format: JsonFormatter
});
var encrypted_json_str = encrypted.toString();
// Encyption complete

// Encrypt file.
encryptor.encryptFile('file.txt', 'encrypted.zaseth', message, key, options, function (err){
    if (err) {
        console.log("There was an error...");
        throw err;
        return;
    } else {
        console.log("File encrypted!");
    }
    // Encryption complete.
});

为什么这不起作用?我要打印的加密部分位于底部。

我只是尝试了以下但是没有效果:

// Encrypt file.
encryptor.encryptFile('file.txt', 'encrypted.zaseth', message, key, options, function (err) {
    if(err) {
        return console.log(err);
    }
        console.log("File encrypted!");
    // Encryption complete.
});

2 个答案:

答案 0 :(得分:1)

你指定了太多的论点;所以,你的回调处于错误的位置。

Encryptor.encryptFile()定义了4-5个参数的处理:

Encryptor.encryptFile = function(inputPath, outputPath, key, options, callback) {

  if(typeof options === 'function') {
    callback = options;
    options = {};
  }

  // and so on...

您的代码有6:

encryptor.encryptFile('file.txt', 'encrypted.zaseth', message, key, options, function(err){
                                                      // ^-- what is this?

message论证将一切都降低了。 encryptFile()认为您的消息是密钥,您的密钥是选项,您的选项是回调....并完全忽略回调。由于意外无效的参数类型,它可能还会导致在错误处理之前抛出错误。

答案 1 :(得分:1)

问题1:

你有表达式

var key = encrypted_json_str

<强>前

encrypted_json_str = encrypted.toString()

这意味着key已分配undefined(因为此时encrypted_json_str仍为undefined),这将导致encryptFile()方法抛出错误< / p>

问题2:

正如@canon已经解释的那样,在您对message的调用中,您还有一个额外的参数encryptFile()。这会导致您将message参数用作key参数,将key用作options,将options用作callback。由于options实际上不是一个函数,当encryptFile()尝试调用它时(认为它是callback),它会抛出错误callback is not a function

解决方案:

在致电encryptFile()方法时,请移除message参数并将key参数替换为encrypted_json_str