Node.js - 回调不是函数
问题描述:
我想检索一个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')
})
答
你hash()
功能与此签名定义:
var hash = function(filename, callback)
这意味着你需要PA它包含一个文件名和一个回调。但是,你正在向它传递了一个文件名:
console.log(hash.hash(filename))
正如你可以在执行看,回调是不可选的,是实际得到的结果是这样的唯一途径:
hash.hash(filename, function(result) {
console.log(result);
});
你用2个参数定义你的散列函数,但只用一个参数来调用它:'hash.hash(filename)'。 –
那么,我该如何改变它? – Lock
'hash.hash(文件名,函数(hashResult){console.log(hashResult)})' –