superagent
superagent是一个http方面的库,用于发起请求
- 基本用法
request .post('http://meng.com') .send({name:'meng'}) .set('Accept','application/json') .end(function(err,res){ if(err || !res.ok){ alert(err) }else{ alert('you got' + JSON.stringify(res.body)); })
-
end()
,方法在于发送请求,并且有response
es6语法,使用request.get('/search').end(function(err,res){ ... })
.then()
代替.end()
request.get('search').then(success,failure)
- 支持的http方法,默认为get,也就是不显示写的话默认为get
request('search',function(err,res)) #delete方法有点特殊,因为delete是保留字,所以写的时候用del request.del('/user/1').end(callback)
- 设置头部信息,
set()
,参数接受一对键值对或者一个对象(也就是设置很多头部信息的时候可以写在一个set里也可以链式调用set方法)request.get('/search').set('API-Key','foobar').end(callback)
- GET请求,通过
query()
方法可以生成一个query-stringrequest .get('/search') .query({query:'manny'}) .query({range:'1..5}) .query({order:'desc'}) .end(callback) #生成的路径为/search?query=manny&range=1..5&order=desc #当然,也可以写在一个里面,如果不想用链式调用的方式的话
- HEAD请求
request .head('/users') .query({email:'meng@126.com'}) .end(callback)
- POST/PUT请求
request.post('/user') .set('Content-Type','application/json') .send('{"name":"m","pet":"dd"}')#要发送的数据 .end(callback)
- 设置Content-Type,可以用
set()
, 或者type()
或者request.post('/user') .set('Content-Type','application/json')
request.post('/user') .type('application/json')
- Response 属性
-
res.text
,返回一个未经过解析的response字符串(举例来说如果get爬一个网页,得到的就是整个网页的源码) -
res.body
,目前的理解是解析后的数据,当然如果是解析后,当然要设置过'application/json' -
res.header
,返回解析后的header对象
-
- 终止一个请求,
req.abort()
即可
cheerio基本用法
类似于python的beautifulsoup模块,解析HTML代码,语法类似jquery
- 最基本的用法
var cheerio = require('cheerio') var $ = cheerio.load(htmlCode)
- 对爬取的网页进行处理
#首先获得整个页面的html代码 superagent.get('http://baidu.com').end(function(err,sres){ var $ = cheerio.load(sres.text) #此时$的用法就会jquery一模一样了,查找元素,设置属性都一样,类比吧 })
eventproxy
-
基本用法
//得到eventproxy实例 var ep = new EventProxy() //all方法将handler注册到事件组合上,也相当于监听了这个事件组合 //当event1,event2都完成之后,也就是ep接收到ep.emit()函数之后才会执行最后的函数 ep.all('event1','event2',function(event1,event2){ //函数的参数对应各自的事件名 }) //触发,这里假设event1是数据库的一个操作 db.get('sql',function(err,result){ ep.emit('event1',result) })
-
多类型异步协作
//就是上面的用法,所谓多类型就是多个独立、并且不相关的事件 //all事件有两种注册方法,第一种如上,第二种如下 var ep = EventProxy.create('event1','event2',function(event1,event2){ ... })
-
重复异步协作
抽象出来,一种类型的事件重复做很多次的时候用
var ep = EventProxy() ep.after('event1',number,function(list){ //event1执行number次之后,function将被执行,注意,并不是执行一次就调用一次,是最后完了,然后after函数才被执行 //something被存储在list里面 }) for (var i = 0;i<number;i++){ .... ep.emit('event1',something) }
-
持续型异步协作
当某个事件获取到的数据是动态的,也就是要持续刷新的时候
var ep = new EventProxy(); ep.tail('event1','event2',function(event1,event2){ //也是所有的事件触发之后,这个function被调用执行 //参数对应各自的事件名的最新数据 }) //event1假设是要持续触发的(也就是数据重复更新的),那么将会在每次触发之后tail都会执行一次,event1具体的形式可能就是放在一个定时器里面,5秒执行一次