Skip to content

Commit

Permalink
void 0
Browse files Browse the repository at this point in the history
  • Loading branch information
alsotang committed Oct 6, 2014
1 parent ac0c915 commit ac340ca
Show file tree
Hide file tree
Showing 4 changed files with 80 additions and 4 deletions.
Binary file added lesson4/1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
45 changes: 41 additions & 4 deletions lesson4/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,47 @@

CNode 目前每一页有 40 个主题,于是我们就需要发起 1 + 40 个请求,来达到我们这一课的目标。

后者的 40 个请求,我们并发地发起:),而且不会遇到多线程啊锁什么的,Node.js 的并发模型跟多线程不同,抛却那些观念。更具体一点的话,比如异步到底为何异步,Node.js 为何单线程却能并发这类问题,我就不打算讲了。这方面我本来也不懂,我写 Node.js 只是为了混口饭求生存而已啊!对于这方面有兴趣的同学,强烈推荐 @朴灵 的 《九浅一深Node.js》: http://book.douban.com/subject/25768396/
后者的 40 个请求,我们并发地发起:),而且不会遇到多线程啊锁什么的,Node.js 的并发模型跟多线程不同,抛却那些观念。更具体一点的话,比如异步到底为何异步,Node.js 为何单线程却能并发这类问题,我就不打算讲了。对于这方面有兴趣的同学,强烈推荐 @朴灵 的 《九浅一深Node.js》: http://book.douban.com/subject/25768396/

有些逼格比较高的朋友可能听说过 promise 和 generator 这类概念。不过我呢,只会讲 callback,主要原因是我个人只喜欢 callback。

这次课程我们需要用到三个库:superagent cheerio eventproxy(https://github.com/JacksonTian/eventproxy )

手脚架的工作各位自己来,我们一步一步来一起写出这个程序。

首先 app.js 应该长这样

```js
var eventproxy = require('eventproxy');
var superagent = require('superagent');
var cheerio = require('cheerio');
var url = require('url');

var cnodeUrl = 'https://cnodejs.org/';

superagent.get(cnodeUrl)
.end(function (err, res) {
if (err) {
return console.error(err);
}
var topicUrls = [];
var $ = cheerio.load(res.text);
$('#topic_list .topic_title').each(function (idx, element) {
var $element = $(element);
var href = url.resolve(cnodeUrl, $element.attr('href'));
topicUrls.push(href);
});

console.log(topicUrls);
});
```

运行 `node app.js`

输出如下图:




有些逼格比较高的朋友可能听说过 promise 和 generator 这类概念。不过我的这套课程呢,只会讲 callback,主要原因是我个人只喜欢 callback,我觉得 promise 和 generator 都复杂了。

记者:

🐸:
23 changes: 23 additions & 0 deletions lesson4/app.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
var eventproxy = require('eventproxy');
var superagent = require('superagent');
var cheerio = require('cheerio');
var url = require('url');

var cnodeUrl = 'https://cnodejs.org/';

superagent.get(cnodeUrl)
.end(function (err, res) {
if (err) {
return console.error(err);
}
var topicUrls = [];
var $ = cheerio.load(res.text);
$('#topic_list .topic_title').each(function (idx, element) {
var $element = $(element);
var href = url.resolve(cnodeUrl, $element.attr('href'));
topicUrls.push(href);
});

console.log(topicUrls);
});

16 changes: 16 additions & 0 deletions lesson4/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"name": "lesson4",
"version": "0.0.0",
"description": "使用 eventproxy 控制并发",
"main": "app.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "alsotang <alsotang@gmail.com>",
"license": "MIT",
"dependencies": {
"cheerio": "^0.17.0",
"eventproxy": "^0.3.1",
"superagent": "^0.20.0"
}
}

0 comments on commit ac340ca

Please sign in to comment.