我正在嘗試製作抓取IMDB並列出電影名稱和分級的網絡抓取工具。這是我的index.js文件。 假設我正在抓取10部電影。然後,我將抓取的結果保存在不同的文件中,如'message.txt'。現在我想發送這個message.txt文件作爲對任何請求的響應。但是每當我提出請求時,最初都會向我的瀏覽器發送一個空文件。然後我注意到,抓取的結果保存在message.txt文件中需要一些時間。我認爲這是因爲所有操作在nodejs中都是異步的。那麼只有在抓取完成後才能發送message.txt文件?動作完成後需要發送響應
var express = require('express');
var app = express();
var cheerio = require('cheerio');
var request = require('request');
var fs = require('fs');
app.listen(8080);
console.log('Running');
app.get('/', function(req, res) {
console.log('Recieved the get Request');
var i = 1;
var count = 0;
while (count < 10) {
var url = 'http://www.imdb.com/title/tt' + i + '/';
console.log(url);
count = count + 1;
i = i + 1;
request(url, function(error, response, html) {
if (!error) {
var $ = cheerio.load(html);
var title, ratings, released;
var json = {
title: '',
ratings: '',
released: ''
};
$('.title_wrapper').filter(function() {
var data = $(this);
json.title = data.children().first().text().trim();
json.released = data.children().last().children().last().text().trim();
});
$('.ratingValue').filter(function() {
var data = $(this);
json.ratings = parseFloat(data.text().trim());
});
console.log(json);
fs.appendFile('message.txt', JSON.stringify(json, null, 4) + '\n', function(err) {});
};
});
};
res.sendFile(__dirname + '/index.js');
});
使用的承諾 - 回調,當FS流完成後保存文件撥打電話發送文件。 –
你可以解釋更多@GandalftheWhite – Mohit
我希望可以幫助 –