Node.js 實現序列化流程式控制制

來源:互聯網
上載者:User

標籤:logs   小程式   lam   download   blog   tle   items   miss   擷取   

為了示範如何?串列流程式控制制,我們準備做個小程式,讓它從一個隨機播放的RSS預定源中擷取一片標題和URL,並顯示出來。

RSS預定源列表放在rss_feeds.txt檔案中,內容如下:

http://feed.cnblogs.com/blog/u/376823/rsshttp://lambda-the-ultimate.org/rss.xml

運行程式前我們需要安裝兩個模組:request模組是個經過簡化的HTTP用戶端,你可以用它擷取RSS資料。htmlparser模組能把原始的RSS資料轉換成JavaScript資料結構。

使用如下命令:

npm install requestnpm install htmlparser

代碼如下:

var fs          = require(‘fs‘);var request     = require(‘request‘);var htmlparser  = require(‘htmlparser‘);var configFilename = ‘./rss_feeds.txt‘;function checkForRSSFile () {    fs.exists(configFilename, function (exists) {        if (!exists)            return next(new Error(‘Missing RSS file: ‘ + configFilename));        next(null, configFilename);    });}function readRSSFile (configFilename) {    fs.readFile(configFilename, function(err, feedList) {        if (err) return next(err);        feedList = feedList                    .toString()                    .replace(/~\s+|\s+$/g, ‘‘)                    .split("\n");                var random = Math.floor(Math.random() * feedList.length);        next(null, feedList[random]);    });}function downloadRSSFeed (feedUrl) {    request({uri: feedUrl}, function(err, res, body) {        if (err) return next(err);        if (res.statusCode != 200)            return next(new Error(‘Abnormal response status code‘));        next(null, body);    });}function parseRSSFeed (rss) {    var handler = new htmlparser.RssHandler();    var parser = new htmlparser.Parser(handler);    parser.parseComplete(rss);    if (!handler.dom.items.length)        return next(new Error(‘No RSS items found‘));        var item = handler.dom.items.shift();    console.log(item.title);    console.log(item.link);}var tasks = [ checkForRSSFile,                readRSSFile,                downloadRSSFeed,                parseRSSFeed ];function next(err, result) {    if (err) throw err;    var currentTask = tasks.shift();    if (currentTask) {        currentTask(result);    }}next();

 

Node.js 實現序列化流程式控制制

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.