Giả sử bạn có một trang web chứa một loạt các liên kết HTML tham chiếu đến các tệp video MP4. Bước đầu tiên chúng ta cần cài đặt mô-đun cheerio
để có thể trích xuất các URL từ các liên kết này
npm install cheerio --save
Sau đó, chúng tôi xác định chức năng tải xuống trang web từ xa
'use strict';
const https = require['https'];
const http = require['http'];
const fs = require['fs'];
const cheerio = require['cheerio'];
const getPage = pageURL => {
return new Promise[[resolve, reject] => {
https.get[pageURL, res => {
let data = [];
res.on['data', chunk => {
data.push[chunk];
}];
res.on['end', [] => {
resolve[Buffer.concat[data].toString[]];
}];
}];
}];
};
Quá trình tải xuống trang xảy ra bằng cách nhận bộ đệm dữ liệu sẽ được chuyển đổi thành một chuỗi duy nhất khi kết thúc quá trình truyền dữ liệu. Tại thời điểm này, chúng ta phải xác định quy trình trích xuất các liên kết từ trang
const getFileURLS = async url => {
const urls = [];
try {
const html = await getPage[url];
const $ = cheerio.load[html];
$['a[download]'].each[function[] {
let href = $[this].attr['href'];
urls.push[href];
}];
return urls;
} catch[err] {
return urls;
}
};
Mảng urls
sẽ chứa tất cả các URL của video MP4 và được điền bằng cách lặp với cheerio trên tất cả các phần tử a
có thuộc tính download
và thêm giá trị của thuộc tính
'use strict';
const https = require['https'];
const http = require['http'];
const fs = require['fs'];
const cheerio = require['cheerio'];
const getPage = pageURL => {
return new Promise[[resolve, reject] => {
https.get[pageURL, res => {
let data = [];
res.on['data', chunk => {
data.push[chunk];
}];
res.on['end', [] => {
resolve[Buffer.concat[data].toString[]];
}];
}];
}];
};
0 của chúng vào mảngBây giờ chúng ta cần xác định chức năng sẽ tải xuống một video
const download = [url, destPath] => {
return new Promise[[resolve, reject] => {
http.get[url, res => {
const filePath = fs.createWriteStream[destPath];
res.pipe[filePath];
resolve[true];
}];
}];
};
Dữ liệu video chứa dưới dạng bộ đệm byte sẽ được chuyển hướng đến luồng được tạo bằng phương thức
'use strict';
const https = require['https'];
const http = require['http'];
const fs = require['fs'];
const cheerio = require['cheerio'];
const getPage = pageURL => {
return new Promise[[resolve, reject] => {
https.get[pageURL, res => {
let data = [];
res.on['data', chunk => {
data.push[chunk];
}];
res.on['end', [] => {
resolve[Buffer.concat[data].toString[]];
}];
}];
}];
};
1 thông qua phương thức 'use strict';
const https = require['https'];
const http = require['http'];
const fs = require['fs'];
const cheerio = require['cheerio'];
const getPage = pageURL => {
return new Promise[[resolve, reject] => {
https.get[pageURL, res => {
let data = [];
res.on['data', chunk => {
data.push[chunk];
}];
res.on['end', [] => {
resolve[Buffer.concat[data].toString[]];
}];
}];
}];
};
2 của đối tượng phản hồi được trả về bởi yêu cầu HTTP. Bằng cách này, hiệu suất được tối ưu hóa so với các phương thức ghi mặc định của mô-đun 'use strict';
const https = require['https'];
const http = require['http'];
const fs = require['fs'];
const cheerio = require['cheerio'];
const getPage = pageURL => {
return new Promise[[resolve, reject] => {
https.get[pageURL, res => {
let data = [];
res.on['data', chunk => {
data.push[chunk];
}];
res.on['end', [] => {
resolve[Buffer.concat[data].toString[]];
}];
}];
}];
};
3 cốt lõiBây giờ chúng ta chỉ cần tạo một mảng Lời hứa chứa tất cả các yêu cầu HTTP cho video
________số 8_______Cuối cùng, chúng tôi có thể sử dụng phương pháp
'use strict';
const https = require['https'];
const http = require['http'];
const fs = require['fs'];
const cheerio = require['cheerio'];
const getPage = pageURL => {
return new Promise[[resolve, reject] => {
https.get[pageURL, res => {
let data = [];
res.on['data', chunk => {
data.push[chunk];
}];
res.on['end', [] => {
resolve[Buffer.concat[data].toString[]];
}];
}];
}];
};
4 [chúng tôi cũng có thể sử dụng 'use strict';
const https = require['https'];
const http = require['http'];
const fs = require['fs'];
const cheerio = require['cheerio'];
const getPage = pageURL => {
return new Promise[[resolve, reject] => {
https.get[pageURL, res => {
let data = [];
res.on['data', chunk => {
data.push[chunk];
}];
res.on['end', [] => {
resolve[Buffer.concat[data].toString[]];
}];
}];
}];
};
5 nếu chúng tôi chấp nhận rằng một số lần tải xuống có thể không thành công] để thực hiện tất cả các lần tải xuống[async [] => {
const baseURL = '//see.stanford.edu/course/cs107';
try {
const urls = await getFileURLS[baseURL];
const requests = createDownloadRequests[urls];
await Promise.all[requests];
} catch[err] {
console.log[err];
}
}][];
Tóm lại, sự kết hợp giữa Lời hứa và phát trực tuyến mang lại lợi ích hiệu suất đáng kể cho hoạt động liên kết với IO, chẳng hạn như tải xuống tệp