node lesson4--eventproxy不懂
2024-09-01 00:11:22
var express = require('express');
var superagent = require('superagent');
var cheerio = require('cheerio');
var eventproxy = require('eventproxy');
var url = require('url');// url 模块是 Node.js 标准库里面的
var app = express();
var cnodeurl = 'https://cnodejs.org/';
app.get('/', function(req, res, next){
superagent.get('https://cnodejs.org/')
.end(function(err, sres){
if(err){
return next(err);//It passes control to the next matching route,参数err是???
}
var $ = cheerio.load(sres.text);
var topicUrls = [];
$("#topic_list .topic_title").each(function(idx, ele){
var $ele = $(ele);
var href = $ele.attr('href');
var jumpHref = url.resolve(cnodeurl, href);
topicUrls.push(jumpHref);
})
//res.send(topicUrls);//好像res.send()必须有
// 命令 ep 重复监听 topicUrls.length 次(在这里也就是 40 次) `topic_html` 事件再行动
var ep = new eventproxy();// 得到一个 eventproxy 的实例
ep.after('topic_html', topicUrls.length, function(topics){
// topics 是个数组,包含了 40 次 ep.emit('topic_html', pair) 中的那 40 个 pair
// 在所有文件的异步执行结束后将被执行
// 所有文件的内容都存在topics数组中
//开始行动
topics = topics.map(function(topicPair){//topics里的每一个元素
var topicUrl = topicPair[0];
var topicHtml = topicPair[1];
var $ = cheerio.load(topicHtml);
return ({
title: $('.topic_full_title').text().trim(),
href: topicUrl,
comment1: $('.reply_content').eq(0).text().trim()
})
})
console.log('final: ');
console.log(topics);
});
topicUrls.forEach(function(topicUrl){
superagent.get(topicUrl)
.end(function(err, res){
console.log('fetch ' + topicUrl + ' successfully');
ep.emit('topic_html', [topicUrl, res.text])//触发事件,并且执行所有监听器
//emit 相当于jQuery里的trigger
})
}); });
});
app.listen(8000, function(){
console.log("app start");
})
https://github.com/alsotang/node-lessons/tree/master/lesson4
最新文章
- C#编程模式之扩展命令
- Vue#表单控件绑定
- <;context:component-scan>;使用说明
- linux下用eclipse + GDBserver + JLINK 在线调试(ARM11)
- SqlServer和MySQL游标学习
- Partial Tree---hdu5534(完全背包)
- dedecms:织梦文章如何添加“自定义属性”标签(sql命令行工具)
- java中的IO整理
- 编程算法 - 最长上升子序列问题 代码(C)
- eclipse主题插件
- Java日期格式化方法
- JAVA并发编程实战---第二章:线程安全性
- Loadrunner结果分析中连接图没有数据的设置
- vue源码分析—数据绑定
- mybatis 批量查询参数语句
- bzoj1912 树形dp求直径(新写法),求直径的两端点
- MVC微型框架---------学习
- Django Web最小框架
- MVC异步分页
- 五、Mosquitto 高级应用之权限管理
热门文章
- Angular7环境搭建报错
- 8.6 Android灯光系统_源码分析_背光灯
- swift项目第二天:初始化项目
- Linux环境编程之共享内存区(一):共享内存区简单介绍
- Cocos2dx 小技巧(十六)再谈visit(getDescription)
- MongoDB集群安装与配置2.4.3版本
- 【b601】能量项链
- 【9204】第k小整数
- Spring Tool Suite(STS)加速
- 段的创建表user_segments 分类: H2_ORACLE 2013-08-10 11:13 714人阅读 评论(0) 收藏