美文网首页
nodejs技术栈

nodejs技术栈

作者: 亲爱的孟良 | 来源:发表于2016-10-28 11:18 被阅读105次

    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
      request.get('/search').end(function(err,res){
        ...
      })
      
      es6语法,使用.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-string
      request
        .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秒执行一次
      

    相关文章

      网友评论

          本文标题:nodejs技术栈

          本文链接:https://www.haomeiwen.com/subject/jlxeuttx.html