node lesson4--eventproxy不懂
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
node lesson4--eventproxy不懂的更多相关文章
- node.js+mongodb 爬虫
demo截图: 本demo爬瓜子二手车北京区的数据 (注:需要略懂 node.js / mongodb 不懂也没关系 因为我也不懂啊~~~) 之所以选择爬瓜子二手车网站有两点: 一.网站无需登录,少做 ...
- 复习 - node.js(接口案例)
其实复习一次的作用真实太大了,真的,自从上次ajax开始其实就开始i有点懵懵懂懂的感觉,一直拖想到了node在去回顾一遍,这一次回去复习,ajax已经很熟练了,node之前搞不懂那些原理也顺清楚了好多 ...
- javascript之数据推送
我们使用ajax与后台服务进行交互,常常是通过触发事件来单次交互,但对于有些web应用来说,需要前台与后台保持长连接,前端不定时地接收后台推送的数据信息, 例如:股票行情分析.聊天室和网页在线游戏等. ...
- Gauge框架在JS中的简单应用
gauge框架简介 Gauge是一个轻量级的跨平台测试自动化工具. gauge安装[Win10 64位下测试] [百度网盘链接]https://pan.baidu.com/s/1bidE34gLLrS ...
- babeljs源码
babel.min.js!function(e,t){"object"==typeof exports&&"object"==typeof mo ...
- 手把手教你学node.js 之使用 eventproxy 控制并发
使用 eventproxy 控制并发 目标 建立一个 lesson4 项目,在其中编写代码. 代码的入口是 app.js,当调用 node app.js 时,它会输出 CNode(https://cn ...
- Node.js之eventproxy详解
安装 npm install eventproxy --save 调用 var EventProxy = require('eventproxy'); 异步协作 多类型异步协作 此处以页面渲染为场景, ...
- node,不懂不懂
Four Day-------------------------node.js分对象全局/核心模块/文件模块path(核心模块)--作用:操作路径basername/获取传入路劲dimame/获取传 ...
- node不懂的方法的使用
1. 学习的时候注意,过滤器,上传文件sftp,读取excel,还有cookie的操作,sql的操作.node的框架express koa hapi 还有引擎ejs,hbs,jade,日志管理等,并发 ...
随机推荐
- Log4net.confager配置
<?xml version="1.0" encoding="utf-8"?><log4net> <level value=&qu ...
- spring与memcache的整合
1. pom.xml文件增加: <dependency> <groupId>com.whalin</groupId> <artifactId>Memca ...
- ssi的使用 开启 配置等
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/lsfhack/article/details/69664402ssi的定义SSI(Server Si ...
- 漂亮的Android加载中动画:AVLoadingIndicatorView
AVLoadingIndicatorView 包含一组漂亮的Android加载中动画. IOS版本:here. 示例 Download Apk 用法 步骤1 Add dependencies in b ...
- 关于.c和.h 和定义变量的问题
最初调试的时候是因为有个错误在wavplay.h文件中 于是我跳到了recorderl.h中:从图中看到引用了main.h 出现这个问题的具体原因还是不太清楚: 不过我任务是因为: wavplay.h ...
- csdn博客栏目加入微博关注
大家首先切换到:博客专栏,然后点击"加入专栏".然后直接复制下述代码就能够了: <a href="http://weibo.com/u/3247569660/hom ...
- Lucene学习总结之八:Lucene的查询语法,JavaCC及QueryParser 2014-06-25 14:25 722人阅读 评论(1) 收藏
一.Lucene的查询语法 Lucene所支持的查询语法可见http://lucene.apache.org/java/3_0_1/queryparsersyntax.html (1) 语法关键字 + ...
- thinkphp缩略图
<?php class IndexAction extends Action { public function index() { $Photo = M('Photo'); $list = $ ...
- TortoiseGit拉取或推送项目提示 HTTP Basic: Access denied fatal: Authentication failed.
TortoiseGit拉取或推送项目提示 HTTP Basic: Access denied fatal: Authentication failed. 大体意思是,HTTP基本认证失败,访问被拒 ...
- MySQL数据库定时自动备份脚本
Web系统,最重要的事项就是数据库的安全性和完整性. 定时做好备份,非常重要,千万不要在这个问题上偷懒.如果你的重要数据丢失了,会让你欲哭无泪. 导出表结构和数据 mysqldump -uroot ...