Node.js - 回调不是一个函数

时间:2017-11-18 07:11:51

标签: javascript node.js

我正在尝试检索var散列以在另一个模块中使用它。但我有回调问题。我有错误“回调不是一个功能”。我使用回调因为我的变量哈希是未定义的,所以我猜这是异步的问题。

hash.js

var fs = require('fs');
var crypto = require('crypto');
var algorithm = 'sha256';

var hash = function(filename, callback){
  var shasum = crypto.createHash(algorithm);
  var s = fs.ReadStream(filename);

  s.on('data', function(data) {
    shasum.update(data)
  })
  s.on('end', function() {
    var hash = shasum.digest('hex')
    callback(hash);
  })
}

exports.hash = hash;

app.js

app.post('/upload', upload.single('userfile'), function(req, res){ 

  res.cookie('filename', req.file.originalname);
  res.cookie('filesize', req.file.size);
  var filename = __dirname +'/'+ req.file.path;
  console.log(hash.hash(filename))

  //res.cookie('hash', hash.hash(filename)); 
  res.redirect('/hash')
})

1 个答案:

答案 0 :(得分:0)

您的hash()函数是使用此签名定义的:

var hash = function(filename, callback)

这意味着您需要将文件名和回调传递给它。但是,你只传递一个文件名:

console.log(hash.hash(filename))

正如您在实现中所看到的,回调不是可选的,并且是实际获得结果的唯一方法:

hash.hash(filename, function(result) {
    console.log(result);
});