request模块及stream流

request模块

可用于发起 http 或 https 请求,可理解成服务端的 ajax 请求。可用于简单的服务器代理,用法和 ajax 类似。

  • 安装: npm install request --save

  • GET 请求

    const request = require('request');

    request.get('https://cnodejs.org/api/v1/topics?page=1&limit=10', (error, response, body) => {
        // error: 错误信息,默认null
        // response: 相应对象
        // body: 请求响应内容
        console.log(body)
    });
    //or
    request('https://cnodejs.org/api/v1/topics?page=1&limit=10', (error, response, body) => {
        console.log(body)
    });
  • 参数设置
    const request = require('request');
    request({
        url: url,
        method: 'get',
        timeout: 10000,
        headers: {},
        proxy: {} ,
        agentOptions: {},
        params: {}
    }, function(err, res, body) {
    
    });
  • Stream流
    request('http://img.zcool.cn/community/018d4e554967920000019ae9df1533.jpg@900w_1l_2o_100sh.jpg').pipe(fs.createWriteStream('test.png'))
    request('https://cnodejs.org/api/v1/topics?page=1&limit=10').pipe(fs.createWriteStream('cnodejs.json'));
  • stream流

    Stream 是一个抽象接口,往往用于打开大型的文本文件,创建一个读取操作的数据流。Node 中有很多对象实现了这个接口。如http 服务器发起请求的request 对象就是一个 Stream。所有的 Stream 对象都是 EventEmitter 的实例

    • 所谓大型文本文件,指的是文本文件的体积很大,读取操作的缓存装不下,只能分成几次发送,每次发送会触发一个data事件,发送结束会触发end事件。

    • 读取流(以流的方式读取文件内容)

      • setEncoding():设置读取编码格式
      • data事件:读取数据中
      • end事件:数据读取完毕
        var fs = require("fs");
        var data = '';
    
        // 创建可读流
        // 以流的方式读取input.txt中的内容
        var readerStream = fs.createReadStream('input.txt');
        // console.log(readerStream);
    
        // 设置编码为 utf8。
        readerStream.setEncoding('UTF8');
    
        // 处理流事件 --> data, end, and error
        readerStream.on('data', function(chunk) {
        data += chunk;
        });
    
        readerStream.on('end',function(){
        console.log(data);
        });
    
        readerStream.on('error', function(err){
        console.log(err.stack);
        });
    
    • 写入流(以流的方式写入文件)
      • write()方法:写入内容方法
      • end()方法:标记写入结束
      • finish事件:写入完成后执行
        //创建一个可以写入的流,写入到文件 output.txt 中
    
        var fs = require("fs");
        var data = '中国';
    
        // 创建一个可以写入的流,写入到文件 output.txt 中
        // var writerStream = fs.createWriteStream('output.txt', {'flags': 'a'}); //追加文本
        var writerStream = fs.createWriteStream('output.txt');
    
        // 使用 utf8 编码写入数据
        writerStream.write(data,'UTF8');
    
        // 标记文件末尾
        writerStream.end();
    
        // 处理流事件 --> data, end, and error
        writerStream.on('finish', function() {
            console.log("写入完成。");
        });
    
        writerStream.on('error', function(err){
           console.log(err.stack);
        });
    
    • 管道流pipe

    管道提供了一个输出流到输入流的机制。通常我们用于从一个流中获取数据并将数据传递到另外一个流中。我们把文件比作装水的桶,而水就是文件里的内容,我们用一根管子(pipe)连接两个桶使得水从一个桶流入另一个桶,这样就慢慢的实现了大文件的复制过程。

        var fs = require("fs");
    
        // 创建一个可读流
        var readerStream = fs.createReadStream('input.txt');
    
        // 创建一个可写流 
        var writerStream = fs.createWriteStream('output.txt');
    
        // 管道读写操作
        // 读取 input.txt 文件内容,并将内容写入到 output.txt 文件中
        readerStream.pipe(writerStream);
    
    • 链式流(多个pipe)

    链式是通过连接输出流到另外一个流并创建多个对个流操作链的机制。链式流一般用于管道操作。接下来我们就是用管道和链式来压缩和解压文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值