node学习笔记二

起步
  • hello world:
//引入http模块
var http = require('http');
//创建服务器
http.createServer(function(request, response){
    //发送http头部
    //http状态值:200
    //内容类型:text/plain
    response.writeHead(200, { 'content-type': 'text/plain' });

    //发送响应数据
    response.end("hello world\n")
}).listen(3000);
//终端提示信息
console.log("server running at http://localhost:3000/")
IO操作
  • 读文件:
//导入fileSystem模块
var fs = require('fs');
//进行读文件操作
fs.readFile('something.txt', function(error, data){
    if(error)
	    console.error(error);
    else
	    console.log(data.toString());
});
fs.writeFile
事件循环

事件循环

  • node使用一个事件循环来监听事件,当出现了对应事件时,调用回调函数:
//导入events模块
var events = require('events');
//创建EventEmitter对象
var eventEmitter = new events.EventEmitter();
//注册监听器
eventEmitter.on('click', () => {
    console.log('this is click event!');
});
//触发事件
eventEmitter.emit('click');
  • 事件监听类型:
    • on、addListener:每次都会监听事件
    • once:只会监听一次事件
    • removeListener[eventName, callback]:移除指定name事件的监听数组的指定事件监听器
    • removeAllListeners[eventName]:移除所有事件监听器或指定name的监听器
  • error:事件监听出错的时候会触发的事件对象,当出错的时候会退出node进程,所以最好对 error 事件进行监听
  • 事件监听器会对所有注册在其上的事件处理程序,进行同步调用
缓冲区
  • js没有二进制数据类型,所以 node 读取图片或者二进制流的时候,会使用 buffer 来存储二进制数据
  • 使用:
//新建一个大小为10字节且没有填充的缓存区
//var buff = Buffer.alloc(10);
//新建一个大小为10字节的缓存区
//var buff = Buffer.allocUnsafe(10);
//根据数组来创建缓存区
//var buff = Buffer.from([1, 2, 3]);
//写入缓冲区,返回写入的长度
//var len = buff.write('0123456789');
//console.log(len);
//根据字符串来创建缓存区
var buff = Buffer.from('123')
console.log(buff.toString('utf8'));//123
  • Buffer.from()、Buffer.alloc()、Buffer.allocUnsafe() 的区别:
    • Buffer.from() 接受字符串、buffer对象、数组等,返回一个新的缓存区
    • Buffer.alloc() 会创建一个未初始化的缓存区,可能会存在敏感数据
    • Buffer.allocUnsafe() 会创建一个初始化了的缓存区,速度比 alloc() 慢
  • buffer 迭代:
var buff = Buffer.from([1, 2, 3]);
for(const b of buff)
    console.log(b);
  • 流是 node 处理流式数据的抽象接口
  • 流的种类:
    • writable:可读流
    • readable:可写流
    • duplex:即可读又可写的流(双工)
    • transform:在读写过程中可以修改或转换数据的双工流
  • 使用(假如使用的txt,记得修改默认编码方式):
//引入steam模块,不过其它模块一般都对其进行了封装,所以一般不会使用
//var stream = require('steam');
//引入fs模块
var fs = require('fs');
var data = '';
//创建可读流
var readableStream = fs.createReadStream('something.txt');
//设置编码
readableStream.setEncoding = 'UTF8';
//处理可读流事件
readableStream.on('data', (chunk) => {
    data += chunk;
});
readableStream.on('end', () => {
    console.log(data);
});
readableStream.on('error', (err) => {
    console.error(err);
});

//创建可写流
var writableStream = fs.createWriteStream('another.txt');
//设置编码
writableStream.write('第二句话', 'UTF8');
//标记文件末尾
writableStream.end();
//处理写入流事件
writableStream.on('finish', () => {
    console.log("写入完成");
});
writableStream.on('error', (err) => {
    console.error(err);
})
  • 可写流事件:
    • close:当流关闭的时候触发的事件,表示这个流不会再触发任何事件了
    • drain:当可写流缓存满了的时候,会将 stream.write(chunk) 设为 false,此时最好停止写入数据,直到缓存清空(排干),会触发 drain 事件,这时可以继续写入数据
    • error:写入流出错时的事件
    • finish:调用 stream.end(),且缓存数据都已交给底层浏览器后触发
    • pipe:在可读流上调用 stream.pipe() 时触发
    • unpipe:在可读流上调用 stream.unpipe() 时触发,可读流通过管道流向可写流出错时也会触发
  • 可读流事件:
    • close:同上
    • data:当流将数据块传送给消费者后触发
    • end:当流中没有数据后触发
    • error:同上
    • readable:当流中有数据可读的时候触发
  • 使用管道:
var fs = require('fs');
var readStream = fs.createReadStream('something.txt');
var writeStream = fs.createWriteStream('another.txt');
readStream.pipe(writeStream);
模块系统
  • node中,每个文件都被视为独立的模块
  • 使用 require 加载模块的优先顺序:
    导入模块
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值