2017-11-18 124 views
-1

我想检索一个var哈希在另一个模块中使用它。但我有一个回调问题。我有错误“回调不是函数”。我使用回调,因为我的变量哈希值是未定义的,所以我想这是一个异步问题。Node.js - 回调不是函数

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') 
}) 
+3

你用2个参数定义你的散列函数,但只用一个参数来调用它:'hash.hash(filename)'。 –

+0

那么,我该如何改变它? – Lock

+0

'hash.hash(文件名,函数(hashResult){console.log(hashResult)})' –

回答

0

hash()功能与此签名定义:

var hash = function(filename, callback) 

这意味着你需要PA它包含一个文件名和一个回调。但是,你正在向它传递了一个文件名:

console.log(hash.hash(filename)) 

正如你可以在执行看,回调是不可选的,是实际得到的结果是这样的唯一途径:

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

非常感谢你:) – Lock

+0

@Lock - 因为它看起来像你可能在这里是新的,如果这回答您的问题,那么您可以通过点击答案左侧的复选标记来向社区表明。这也将使您在遵循正确的程序的情况下获得一些信誉点。 – jfriend00