前沿:核心模块二主要是和流相关的部分,当然要想给这一块有清楚的了解,你需要对核心模块(一)中的内容有一些了解。

fs模块

fs模块的常见方法(所有的读方法,文件必须存在,不存在就会报错,所有的写方法,如果文件不存在,则创建该文件):

  1. fs.readFile() --- fs.readFileSync()
let fs=require('fs');
//是把整个文件作为一个整体
fs.readFile('./1.txt',{encoding:'utf8'},function (err,data) {console.log(err);console.log(data);
});
//同步方法是没有回调函数的
let result=fs.readFileSync('./1.txt',{encoding: 'utf8'});
console.log(result);
复制代码
  1. fs.writeFile() ---fs.weiteFileSync()
const fs=require('fs');
//会覆盖文件原有内容
//fs.writeFile('./2.txt','123',{encoding: 'utf8'},(err) => {
//  console.log('write OK');
//})
fs.writeFileSync('./3.txt','456');
复制代码
  1. fs.appendFile()
const fs=require('fs');
//writeFile flags=w 写入,如果文件已经存在,则删除掉文件后再写入
//fs.writeFile('./4.txt','789',{flag:'a'});
//给文件追加内容,不会覆盖原有内容
fs.appendFile('./4.txt','789');
复制代码

以上三个方法的弊端:都是将文件整体读出或者写入。

  1. fs.open()
fs.open(src, 'r', (err,fd))    //第一个参数表示文件,第二个表示什么方式(r, r+, w, w+, a, a+), 第三个是回调,其中 fd是文件描述符
复制代码
  1. fs.read() //将内容放到内存中
let buffer=Buffer.alloc(6);//[0,1,2,3,4,5]
fs.read(fd,buffer,0,3,3,(err,bytesRead) => {   //文件描述符,buffer,buffer0的位置,buffer的长度,文件读取的位置,
//回调 bytesRead表示实际字节console.log(buffer.toString());
});
复制代码
  1. fs.write()
let buffer=Buffer.from('天天向上');//[0,1,2,3,4,5,6,7,8,9,10,11]
//fd buffer offset
fs.write(fd,buffer,3,6,3,(err,bytesWritten) => { //文件描述符,buffer,buffer起始位置,buffer长度,文件写入位置,
//回调 bytesWritten表示实际字节console.log(err);fs.fsync(fd,(err) => {fs.close(fd,(err) => {console.log('关闭文件');});});
});
复制代码
  1. fs.createReadStream()

  2. fs.fsync()

  3. fs.createWriteStream()

来一个小例子,有助于理解

// pipe
let fs = require('fs');
let rs = fs.createReadStream('./1.txt',{highWaterMark:1
})
let ws = fs.createWriteStream('./5.txt',{highWaterMark:2
})
let index = 1;
rs.on('data', (data) => {console.log(index++)let flag = ws.write(data);    // 当内部的可写缓冲的总大小小于 highWaterMark 设置的阈值时,//调用 writable.write() 会返回 true。 一旦内部缓冲的大小达到或超过 highWaterMark 时,则会返回 false。if (!flag) {     //内部缓冲超过highWaterMarkrs.pause()}
})
let wsIndex = 1;
ws.on('drain', () => {console.log('ws'+wsIndex++)rs.resume()
})
// 1 2 ws1 3 4 ws2 5 6 ws3
复制代码
  1. fs.stat()
//读取文件的状态;不建议在调用 fs.open() 、fs.readFile() 或 fs.writeFile() 之前使用 fs.stat() 检查一个文件是否存在。
//作为替代,用户代码应该直接打开/读取/写入文件,当文件无效时再处理错误。//如果要检查一个文件是否存在且不操作它,推荐使用 fs.access()。let fs = require('fs');
fs.stat('./1.txt', (err, data) => {console.log(data)    //列举几个常用的属性 size,ctime,birthtime,mtime
})
复制代码
  1. fs.access() 文件是否存在
let fs = require('fs');
fs.access('./1.txt', (err) => {console.log(err)
})
复制代码
  1. fs.mkdir()
//创建目录 创建目录的时候一定要注意 父目录一定要存在
let fs = require('fs');
fs.mkdir('./a/b', (err) => {   //如果a目录不存在 则会报错console.log(err)
})
复制代码
  1. fs.rmdir()
//删除目录 同理 如果a目录不是空的,需要删除a里面的从里面往外一层一层删除,否则报错,directory not empty
let fs = require('fs');
fs.rmdir('./a', (err) => {console.log(err)
})
复制代码

TCP模块

//传输层 http websocket都是基于tcp tcp是一个可读可写流// 传输层  http websocket (应用起来基本一样)
let net = require('net');// 套接字
let server = net.createServer();
// 链接时会执行此方法,每次链接都会产产生一个socket对象
// http规定的头 设置一些头
// socket是一个可读可写的流 Duplex
server.on('connection',function(socket){// socket 没有规则 我们可以用tcp 模拟httpsocket.setEncoding('utf8');socket.on('data',function(data){console.log(data);});//模拟socket.write(`
HTTP/1.1 200 ok
Content-Length: 5hello`);
});
server.listen(3000);
//当我们打开浏览器 localhost:3000时 可以看到hello
复制代码

http模块

//常见用法
var http=require("http");http.createServer(function(req,res){res.writeHead(200,{"content-type":"text/plain"});res.write("hello nodejs");res.end();
}).listen(3000);
//在浏览器中输入 localhost:3000 我们可以看到hello nodejs
复制代码

以上就是nodejs的常用核心模块的一部分,因为涉及的内容比较多并没有深入进去,其实每个部分都可以展开里面有很多知识,很多深入的知识我本人也不是很了解,希望上面的一些核心内容能够帮助到你,当然有很多不足之处希望朋友们提出指正。也希望和各位朋友一起学习分享!

后记:

本文涉及到的流更加深入一点的可以看

  • 面试高级前端工程师必问之流-stream

相关内容:

  • nodejs核心模块(一)

带你一起撸一遍 nodejs 常用核心模块(二)相关推荐

  1. nodejs常用核心模块介绍

    Node核心模块之HTTP模块 作用:处理客户端的网络请求代码步骤:1.导入 HTTP 核心模块2.监听客户端的请求3.处理客户端的请求4.开启服务器 Node核心模块之URL模块 作用:处理客户端请 ...

  2. 炒鸡简单,带你快速撸一遍Numpy代码!

    作者:贾胜杰,硕士,退役军人,电气工程专业,现成功转行K12领域数据挖掘工程师,不仅在数据清理.分析和预测方向,而且在自制力和高效学习方面都有丰富经验. 编辑:王老湿 我们一起来学习Python数据分 ...

  3. python中常用的模块二

    一.序列化 指:在我们存储数据的时候,需要对我们的对象进行处理,把对象处理成方便存储和传输的数据格式,这个就是序列化, 不同的序列化结果不同,但目的是一样的,都是为了存储和传输. 一,pickle.可 ...

  4. python处理数据0和负数跳过_Python第十一章-常用的核心模块03-json模块

    python 自称 "Batteries included"(自带电池, 自备干粮?), 就是因为他提供了很多内置的模块, 使用这些模块无需安装和配置即可使用. 本章主要介绍 py ...

  5. nodejs没有net模块_Node.js实战16:用http模块创建web服务器

    Nodejs的http模块,是基于net.server,经过c++二次封装,也是nodejs的核心模块. 功能比net.server更强,可解析和操作更多细节内容,如值.content-length. ...

  6. nodejs基础 ps模块常用API用法

    nodejs的fs模块就是针对文件和文件夹进行一系列的操作 常用的fs模块API(感兴趣的可以去node官网看更多的) fs.readFile():用来读取文件内容的函数 fs.readdir():读 ...

  7. 带着问题撸源码系列-zookeeper-临时节点[ephemeral]是怎么弄的?我写了一堆临时节点为啥我一掉线就全没了?

    问题 带着问题撸源码系列-zookeeper-临时节点[ephemeral]是怎么弄的?我写了一堆临时节点为啥我一掉线就全没了? 猜测 可能是有线程维护着,每个session有一个临时节点列表,一旦客 ...

  8. 百度工程师带你体验引擎中的nodejs

    作者 | 糖果candy 导读 如果你是一个前端程序员,你不懂得像PHP.Python或Ruby等动态编程语言,然后你想创建自己的服务,那么Node.js是一个非常好的选择. Node.js 是运行在 ...

  9. NodeJS 常用模块推荐

    cluster&forever cluster & forever 虽然 nodejs 原生已经提供了 cluster 模块,大部分情况下可以满足我们的基本需求,但这两个模块 clus ...

最新文章

  1. SVN 钩子操作-同步更新web目录
  2. vue-框架模板的源代码注释
  3. redis 基本类型和命令(一)
  4. json.decoder.JSONDecodeError: Expecting value: line 28 column 5 (char 731)
  5. Leecode 301. 删除无效的括号——Leecode每日一题系列
  6. 行内元素中间出现空隙
  7. 判断三个数是否能构成三角形_三角形的面积
  8. 从程序媛到微软全球 AKS 女掌门人,技术女神驾到!
  9. jquery form java_springmvc利用jquery.form插件异步上传文件示例
  10. 一台CentOS云主机更改源的记录
  11. Project: 项目经理新建资源预订
  12. 侧栏广告 image flash
  13. hibernate 反向生实体类 and 为什么老是多一个id
  14. java实现点卡生成
  15. badboy linux 版本,jmeter/Badboy安装教程
  16. html化学式编辑器,常用的化学式编辑器有哪些?4款化学式编辑器分享
  17. 就知道你喜欢中文版:Spread .NET 15.2 FOR WPF
  18. 水星路由器DNS服务器未响应,用手机设置水星(mercury)路由器WiFi的步骤
  19. idea2018激活码
  20. 《关于我重装系统后修复VSCode这档事》C++环境配置

热门文章

  1. Linux下 jenkins的安装
  2. Javascript、Jquery获取浏览器和屏幕各种高度宽度[mark]
  3. CodePush使用调研
  4. linux 防火墙iptables简明教程
  5. 【Linux】【通信】1.ping不通
  6. 人的一生,到底在追求甚么?...
  7. linux cron读哪个文件,linux crontab 文件位置和日志位置
  8. node-OSDomainNetPath
  9. 【C 语言】二级指针作为输入 ( 指针数组 | 指针数组排序 | 字符串排序 | strcmp 函数 )
  10. 【Java 虚拟机原理】Dalvik 虚拟机 ( 打包 Jar 文件和 Dex 文件 | 反编译 Dex 文件 | 分析 Dex 文件反编译结果 )