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";
        }
    }
    
  • 相关阅读:
    使用某些 DOCTYPE 时会导致 document.body.scrollTop 失效
    VB.NET 笔记1
    知识管理系统Data Solution研发日记之一 场景设计与需求列出
    知识管理系统Data Solution研发日记之五 网页下载,转换,导入
    折腾了这么多年的.NET开发,也只学会了这么几招 软件开发不是生活的全部,但是好的生活全靠它了
    分享制作精良的知识管理系统 博客园博客备份程序 Site Rebuild
    知识管理系统Data Solution研发日记之四 片段式数据解决方案
    知识管理系统Data Solution研发日记之二 应用程序系列
    知识管理系统Data Solution研发日记之七 源代码与解决方案
    知识管理系统Data Solution研发日记之三 文档解决方案
  • 原文地址:https://www.cnblogs.com/Tony100K/p/node.html
Copyright © 2011-2022 走看看