小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
使用 node 命令批量 请求文件
Node.js
官网: nodejs.org/en/
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时。 使得其性能特别好! Node.js 是一个开源和跨平台的 JavaScript 运行时环境。 它几乎是任何类型项目的流行工具!
小示例: 使用node.js 启动一个服务,
使得前端也可使用 JavaScript 代码编写一个请求接口:
// 引入 http 模块
const http = require('http')
const hostname = '127.0.0.1'
const port = 3000
// 服务逻辑:
const server = http.createServer((req, res) => {
res.statusCode = 200
res.setHeader('Content-Type', 'text/plain')
res.end('Hello World\n')
})
// 启动服务
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`)
})
批量请求文件
用到的模块有: http, request, fs, bluebird 等模块
var http = require("http");
var request = require("request");
var fs = require("fs");
var Promise = require("bluebird");
var curIndex = 1217;
var curYear = 2018;
// 下载文件 方法函数
function downloadFile(uri, filename) {
return new Promise((resolve, reject) => {
console.log("downloadURL:" + uri);
request(
{
uri: uri,
encoding: "binary",
method: "GET",
headers: {
referer: "Referer",
},
},
(error, response, body) => {
if (!error && response.statusCode == 200) {
fs.writeFileSync(filename, body, "binary");
console.log("downloaded:" + filename);
resolve();
}
}
);
});
}
var downDest = "D:/AAcode/js-patu"; // 下载路径,可改成自己提前建立好的文件夹,需要提前建立好
var downloadArr = [];
while (curYear <= 2018) {
let yearPath = downDest + "/" + curYear;
if (!fs.existsSync(yearPath)) {
fs.mkdirSync(yearPath);
}
while (curIndex < 2000) {
var filename = curIndex + ".jpg";
var url = "http://img.mmjpg.com/large/" + curYear + "/" + filename;
var path = yearPath + "/" + filename;
downloadArr.push({ url: url, path: path });
curIndex += 1;
}
curYear += 1;
}
// 串行执行
Promise.mapSeries(downloadArr, item => downloadFile(item.url, item.path)).then(
() => {
console.log("全部任务执行完成后打印提示内容");
}
);