node.js - Javascript callback function not work -
i'm working nodejs , expressjs. have 2 functions, main functions:
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() {}); });
and external function
module.exports = function() { homecoming 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); }); }; };
but it's fired error when running:
typeerror: string not function
i don't know if i'm uses callback right or not?
thank you
your request()
callback parameters aren't quite labelled appropriately. 3rd argument passed callback entire buffered (string) body response, not function. that's why complains @ callback(filelength);
.
also, because used callback (which receives entire buffered response), there no need request url again. alter this:
mkdirs(folder, function(){ var r = request(uri).pipe(fs.createwritestream(folder + filename)); r.on('close'); });
to this:
mkdirs(folder, function() { // `data` here 3rd argument `request()` callback ... fs.writefile(folder + filename, data); });
to save http request.
or if want stream response data, do:
request(uri).on('response', function(res) { // ... mkdirs(folder, function() { res.pipe(fs.createwritestream(folder + filename)); }); });
javascript node.js callback
No comments:
Post a Comment