node study notes (b) and stream buffers

content

Video
fourth chapter
rookie tutorial server

//复制文件
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 status code

All normal 200
301 requested URL has been moved
400 requested format is invalid
401 client does not have permission to
403 servers reject the request
404 Not Found
500 an inconsistent state, bug occurs
error 503 runtime

//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 type only, no binary data type, there is hereby a Buffer class to store binary data

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("文件解压完成。");

Module

About the cycle call

node comes with a mechanism to prevent the cycle call, it is strong, initialize, and finally take effect

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

Return different types of files based on extensions

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";
    }
}

Guess you like

Origin www.cnblogs.com/Tony100K/p/node.html