Monday 15 March 2010

node.js - Javascript callback function not work -



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