[英]Javascript callback function not work
我正在使用nodeJS和expressJS。 我有2个功能,主要功能:
download(imgUrl, imgMD5, function(fileLength, fileSize) {
console.log(fileLength);
var qb = data.Img.query();
qb.where('img_md5', '=', imgMD5).update({
img_downloaded: 1
}).then(function() {});
});
和外部功能
module.exports = function() {
return function(uri, filename) {
request(uri, function(err, res, callback) {
fileLength = res.headers['content-length'];
var mkdirs = function(fold, callback) {
var pf = path.dirname(fold);
fs.exists(pf, function(exists) {
var create = function() {
fs.mkdir(fold, callback);
};
if (exists) {
create();
} else
mkdirs(pf, create);
})
};
var folder = ('./downloaded/' + yy + '/' + mm + '/' + dd + '/' + ho + '/');
mkdirs(folder, function() {
var r = request(uri).pipe(fs.createWriteStream(folder + filename));
r.on('close');
});
callback(fileLength);
});
};
};
但是在运行时会引发错误:
TypeError:字符串不是函数
我不知道我是否正确使用了回调?
谢谢
您的request()
回调参数标记不正确。 传递给回调的第三个参数是响应中整个缓冲区(字符串)的主体,而不是函数。 这就是为什么它抱怨callback(fileLength);
的原因callback(fileLength);
。
另外,由于您使用了回调(接收整个缓冲的响应),因此无需再次请求URL。 因此,您可以更改此设置:
mkdirs(folder, function(){
var r = request(uri).pipe(fs.createWriteStream(folder + filename));
r.on('close');
});
对此:
mkdirs(folder, function() {
// `data` here is the third argument to the `request()` callback ...
fs.writeFile(folder + filename, data);
});
保存额外的HTTP请求。
或者,如果您确实希望流式传输响应数据,则可以执行以下操作:
request(uri).on('response', function(res) {
// ...
mkdirs(folder, function() {
res.pipe(fs.createWriteStream(folder + filename));
});
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.