三种Node.js写文件的方式


Posted in Javascript onMarch 08, 2016

本文分享了Node.js写文件的三种方式,具体内容和如下

1、通过管道流写文件

采用管道传输二进制流,可以实现自动管理流,可写流不必当心可读流流的过快而崩溃,适合大小文件传输(推荐)

var readStream = fs.createReadStream(decodeURIComponent(root + filepath.pathname)); // 必须解码url
 readStream.pipe(res); // 管道传输
 res.writeHead(200,{
   'Content-Type' : contType
 });

 // 出错处理
 readStream.on('error', function() {
   res.writeHead(404,'can not find this page',{
     'Content-Type' : 'text/html'
   });
   readStream.pause();
   res.end('404 can not find this page');
   console.log('error in writing or reading ');
 });

2、手动管理流写入

手动管理流,适合大小文件的处理

var readStream = fs.createReadStream(decodeURIComponent(root + filepath.pathname));
 res.writeHead(200,{
   'Content-Type' : contType
 });

 // 当有数据可读时,触发该函数,chunk为所读取到的块
 readStream.on('data',function(chunk) {
   res.write(chunk);
 });

 // 出错时的处理
 readStream.on('error', function() {
   res.writeHead(404,'can not find this page',{
     'Content-Type' : 'text/html'
   });
   readStream.pause();
   res.end('404 can not find this page');
   console.log('error in writing or reading ');
 });

 // 数据读取完毕
 readStream.on('end',function() {
   res.end();
 });

3、通过一次性读完数据写入

一次性读取完文件所有内容,适合小文件(不推荐)

fs.readFile(decodeURIComponent(root + filepath.pathname), function(err, data) {
   if(err) {
     res.writeHead(404,'can not find this page',{
       'Content-Type' : 'text/html'
     });
     res.write('404 can not find this page');

   }else {
     res.writeHead(200,{
       'Content-Type' : contType
     });
     res.write(data);
   }
   res.end();
 });

以上就是本文的全部内容,希望对大家的学习有所帮助。

Javascript 相关文章推荐
JavaScript面向对象之静态与非静态类
Feb 03 Javascript
javascript 四则运算精度修正函数代码
May 31 Javascript
jquery ajax属性async(同步异步)示例
Nov 05 Javascript
jquery原创弹出层折叠效果点击折叠弹出一个层
Mar 12 Javascript
IE6-8中Date不支持toISOString的修复方法
May 04 Javascript
jQuery实现定位滚动条位置
Aug 05 Javascript
jQuery解决input元素的blur事件和其他非表单元素的click事件冲突问题
Aug 15 Javascript
原生js实现鼠标跟随效果
Feb 28 Javascript
微信小程序之数据双向绑定与数据操作
May 12 Javascript
bootstrap datepicker的基本使用教程
Jul 09 Javascript
谈谈JavaScript中的函数
Sep 08 Javascript
uni-app 微信小程序授权登录的实现步骤
Feb 18 Javascript
javascript创建对象、对象继承的实用方式详解
Mar 08 #Javascript
理解javascript正则表达式
Mar 08 #Javascript
JavaScript实现带播放列表的音乐播放器实例分享
Mar 07 #Javascript
详解JavaScript数组和字符串中去除重复值的方法
Mar 07 #Javascript
JavaScript实现字符串与日期的互相转换及日期的格式化
Mar 07 #Javascript
JavaScript中将数组进行合并的基本方法讲解
Mar 07 #Javascript
Bootstrap每天必学之日期控制
Mar 07 #Javascript
You might like
动易数据转成dedecms的php程序
2007/04/07 PHP
解析PHP可变函数的经典用法
2013/06/20 PHP
php 升级到 5.3+ 后出现的一些错误,如 ereg(); ereg_replace(); 函数报错
2015/12/07 PHP
浅谈PHP的反射API
2017/02/26 PHP
ASP.NET jQuery 实例8 (动态添加内容到DropDownList)
2012/02/03 Javascript
c#+jquery实现获取radio和checkbox的值
2020/09/12 Javascript
详谈jQuery unbind 删除绑定事件 / 移除标签方法
2017/03/02 Javascript
浅谈关于.vue文件中style的scoped属性
2017/08/19 Javascript
node通过npm写一个cli命令行工具
2017/10/12 Javascript
javascript深拷贝、浅拷贝和循环引用深入理解
2018/05/27 Javascript
一个Vue页面的内存泄露分析详解
2018/06/25 Javascript
AngularJs分页插件使用详解
2018/06/30 Javascript
jQuery实现基本淡入淡出效果的方法详解
2018/09/05 jQuery
JavaScript 高性能数组去重的方法
2018/09/20 Javascript
Jquery 动态添加元素并添加点击事件实现过程解析
2019/10/12 jQuery
javascript使用Blob对象实现的下载文件操作示例
2020/04/18 Javascript
在vue中使用console.log无效的解决
2020/08/09 Javascript
微信小程序轮播图swiper代码详解
2020/12/01 Javascript
[08:04]TI4西雅图DOTA2前线报道 海涛探访各路人马
2014/07/09 DOTA
巧用Python装饰器 免去调用父类构造函数的麻烦
2012/05/18 Python
python实现RSA加密(解密)算法
2016/02/17 Python
用python写的一个wordpress的采集程序
2016/02/27 Python
机器学习python实战之手写数字识别
2017/11/01 Python
python数据挖掘需要学的内容
2019/06/23 Python
python利用dlib获取人脸的68个landmark
2019/11/27 Python
pytorch逐元素比较tensor大小实例
2020/01/03 Python
python使用for...else跳出双层嵌套循环的方法实例
2020/05/17 Python
Python调用Redis的示例代码
2020/11/24 Python
详解解决jupyter不能使用pytorch的问题
2021/02/18 Python
白兰氏健康Mall:BRAND’S
2017/11/13 全球购物
探索欧洲最好的品牌:Bombinate
2019/06/14 全球购物
经理职责范文
2013/11/08 职场文书
中学生在校期间的自我评价分享
2013/11/13 职场文书
2014政务公开实施方案
2014/02/19 职场文书
2015年医务科工作总结范文
2015/05/26 职场文书
2016年小学优秀班主任事迹材料
2016/02/29 职场文书