zoukankan      html  css  js  c++  java
  • node学习笔记(二)流和缓冲区

    内容

    视频
    第四章内容
    菜鸟教程服务器

    //复制文件
    function de(x) {
        console.log(x);
    }
    var fs=require('fs');
    fs.mkdir('stuff',function () {
       fs.readFile('readme.txt',function (err,data) {
           de(data);
           fs.writeFile('./stuff/writeme.txt',data,function () {
               de('copy sucessfully');
           });
       }) ;
    });
    //del
    function de(x) {
        console.log(x);
    }
    var fs=require('fs');
    fs.unlink('./stuff/readme.txt',function () {
        de('del sucessfully');
    })
    //返回一个html页面
    res.writeHead(200,{'Content-Type':'text/html'});
    var myReadStream=fs.createReadStream('sample.html','utf8');
    myReadStream.pipe(res);
    //创建路由的方法
    console.log(req.url);
            if(req.url==='/'||req.url==='/home')
            {
                res.writeHead(200,{'Content-Type':'text/html'});
                var myReadStream=fs.createReadStream('sample.html','utf8');
                myReadStream.pipe(res);
            }
            else if(req.url==='/devilman')
            {
                res.writeHead(200,{'Content-Type':'application/json'});
                var jsonobj={
                    name:'devilman',
                    atk:2000,
                    def:1500
                };
                res.end(JSON.stringify(jsonobj));
            }
            else {
                res.writeHead(404,{'Content-Type':'text/html'});
                var myReadStream=fs.createReadStream('404.html','utf8');
                myReadStream.pipe(res);
            }
    

    HTTP状态码

    200 一切正常
    301 请求的URL已经被移走
    400 请求的格式是无效的
    401 客户端没有权限
    403 服务器拒绝这个请求
    404 Not Found
    500 状态不一致,出现bug
    503 运行时的错误

    //substr方法左闭右开
    
    

    EventEmitter

    //once(event, listener)
    为指定事件注册一个单次监听器,即 监听器最多只会触发一次,触发后立刻解除该监听器。
    server.once('connection', function (stream) {
      console.log('Ah, we have our first user!');
    });
    //removeListener(event, listener)
    移除指定事件的某个监听器,监听器必须是该事件已经注册过的监听器。
    它接受两个参数,第一个是事件名称,第二个是回调函数名称。
    
    var callback = function(stream) {
      console.log('someone connected!');
    };
    server.on('connection', callback);
    // ...
    server.removeListener('connection', callback);
    //removeAllListeners([event])
    移除所有事件的所有监听器, 如果指定事件,则移除指定事件的所有监听器。
    //setMaxListeners(n)
    默认情况下, EventEmitters 如果你添加的监听器超过 10 个就会输出警告信息。 setMaxListeners 函数用于提高监听器的默认限制的数量。
    //listeners(event)
    返回指定事件的监听器数组。
    //emit(event, [arg1], [arg2], [...])
    按参数的顺序执行每个监听器,如果事件有注册监听返回 true,否则返回 false。
    

    Buffer

    JS只有String类型,没有二进制数据类型,特此有一个Buffer类来存放二进制数据

    const buf=Buffer.from('runoob','ascii');
    console.log(buf.toString('utf8'));
    // 创建一个长度为 10、且用 0 填充的 Buffer。
    const buf1 = Buffer.alloc(10);
    
    // 创建一个长度为 10、且用 0x1 填充的 Buffer。 
    const buf2 = Buffer.alloc(10, 1);
    
    // 创建一个长度为 10、且未初始化的 Buffer。
    // 这个方法比调用 Buffer.alloc() 更快,
    // 但返回的 Buffer 实例可能包含旧数据,
    // 因此需要使用 fill() 或 write() 重写。
    const buf3 = Buffer.allocUnsafe(10);
    
    // 创建一个包含 [0x1, 0x2, 0x3] 的 Buffer。
    const buf4 = Buffer.from([1, 2, 3]);
    
    // 创建一个包含 UTF-8 字节 [0x74, 0xc3, 0xa9, 0x73, 0x74] 的 Buffer。
    const buf5 = Buffer.from('tést');
    
    // 创建一个包含 Latin-1 字节 [0x74, 0xe9, 0x73, 0x74] 的 Buffer。
    const buf6 = Buffer.from('tést', 'latin1');
    buf=Buffer.alloc(256);
    len=buf.write('fym is tianxiadiyi');
    console.log('写入的字节数'+len);
    buf=Buffer.alloc(26);
    for(var i=0;i<26;i++)
    {
        buf[i]=i+97;
    }
    de(buf.toString('ascii'));
    de(buf.toString('ascii',0,5));//abcde
    //转成JSON文件
    const buf=Buffer.from([0x1,0x2,0x3,0x4,0x5]);
    const json=JSON.stringify(buf);
    de(json);//{"type":"Buffer","data":[1,2,3,4,5]}
    //Buffer合并
    var buffer1 = Buffer.from(('菜鸟教程'));
    var buffer2 = Buffer.from(('www.runoob.com'));
    var buffer3 = Buffer.concat([buffer1,buffer2]);
    console.log("buffer3 内容: " + buffer3.toString());
    //Buffer比较
    //有一个length函数记录长度
    var buf1 = Buffer.from('abcdefghijkl');
    var buf2 = Buffer.from('RUNOOB');
    //将 buf2 插入到 buf1 指定位置上
    buf2.copy(buf1, 2);
    console.log(buf1.toString());//abRUNOOBijkl
    //Buffer裁剪
    var buffer1 = Buffer.from('runoob');
    // 剪切缓冲区
    var buffer2 = buffer1.slice(0,2);
    console.log("buffer2 content: " + buffer2.toString());
    
    

    Stream

    //读入流
    var fs=require('fs');
    var data='';
    var rst=fs.createReadStream('gou.txt');
    rst.setEncoding('utf8');
    rst.on('data',function (chunk) {
        data+=chunk;
    });
    rst.on('end',function () {
       de(data);
    });
    rst.on('error',function (err) {
        de(err.stack);
    });
    de('fuck');
    //写流
    var fs = require("fs");
    var data = '菜鸟教程官网地址:www.runoob.com';
    // 创建一个可以写入的流,写入到文件 output.txt 中
    var writerStream = fs.createWriteStream('output.txt');
    // 使用 utf8 编码写入数据
    writerStream.write(data,'UTF8');
    // 标记文件末尾
    writerStream.end();
    // 处理流事件 --> data, end, and error
    writerStream.on('end', function() {
        console.log("写入完成。");
    });
    
    writerStream.on('error', function(err){
        console.log(err.stack);
    });
    
    console.log("程序执行完毕");
    //管道流 从文件传到另一个文件
    var fs = require("fs");
    // 创建一个可读流
    var readerStream = fs.createReadStream('input.txt');
    // 创建一个可写流
    var writerStream = fs.createWriteStream('output.txt');
    // 管道读写操作
    // 读取 input.txt 文件内容,并将内容写入到 output.txt 文件中
    readerStream.pipe(writerStream);
    
    console.log("程序执行完毕")
    //压缩
    var fs = require("fs");
    var zlib = require('zlib');
    
    // 压缩 input.txt 文件为 input.txt.gz
    fs.createReadStream('gou.txt')
        .pipe(zlib.createGzip())
        .pipe(fs.createWriteStream('gou.txt.gz'));
    
    console.log("文件压缩完成。");
    //解压
    var fs = require("fs");
    var zlib = require('zlib');
    
    // 解压 input.txt.gz 文件为 input.txt
    fs.createReadStream('input.txt.gz')
      .pipe(zlib.createGunzip())
      .pipe(fs.createWriteStream('input.txt'));
      
    console.log("文件解压完成。");
    

    模块

    有关循环调用

    node自带防止循环调用的机制,实在是强,先初始化,最后再生效

    if(typeof d=='string');//判断弱变量的变量类型
    要将buf转换成字符串,需要用到toString的方法
    buff.fill("")清零的方法
    
    
    

    根据扩展名返回不同类型文件

    function content_distribution(file) {
        var ext=path.extname(file);
        switch (extname.toLowerCase()) {
            case '.html':return "text/html";
            case '.css': return "text/css";
            case '.jpg'return "image/jpeg";
            default return "text/plain";
        }
    }
    
  • 相关阅读:
    仙人球的残影
    Calculate the formula
    自定义代码段
    getter-setter方法练习
    封装
    Xcode文档安装
    Xcode模板修改
    匿名对象
    OC多文件开发介绍
    #pragma mark指令
  • 原文地址:https://www.cnblogs.com/Tony100K/p/node.html
Copyright © 2011-2022 走看看