三种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 相关文章推荐
innerText和innerHTML 一些问题分析
May 18 Javascript
JavaScript将相对地址转换为绝对地址示例代码
Jul 19 Javascript
Textarea根据内容自适应高度
Oct 28 Javascript
JS实现浏览器状态栏显示时间的方法
Oct 27 Javascript
Javascript中的数组常用方法解析
Jun 17 Javascript
深入理解JavaScript定时机制
Oct 27 Javascript
javascript中setAttribute兼容性用法分析
Dec 12 Javascript
基于jQuery实现一个marquee无缝滚动的插件
Mar 09 Javascript
ztree简介_动力节点Java学院整理
Jul 19 Javascript
JQuery Ajax执行跨域请求数据的解决方案
Dec 10 jQuery
ES6知识点整理之函数对象参数默认值及其解构应用示例
Apr 17 Javascript
Vue项目中使用jquery的简单方法
May 16 jQuery
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
国内php原创论坛
2006/10/09 PHP
详解WordPress开发中的get_post与get_posts函数使用
2016/01/04 PHP
PHP基于双向链表与排序操作实现的会员排名功能示例
2017/12/26 PHP
Laravel 加载第三方类库的方法
2018/04/20 PHP
fancybox1.3.1 基于Jquery的插件在IE中图片显示问题
2010/10/01 Javascript
ASP.NET中基于JQUERY的高性能的TreeView补充
2011/02/23 Javascript
JS+CSS设置img在DIV中只显示Img垂直居中的部分
2013/10/24 Javascript
用C/C++来实现 Node.js 的模块(一)
2014/09/24 Javascript
JavaScript实现列出数组中最长的连续数
2014/12/29 Javascript
Vuejs第六篇之Vuejs与form元素实例解析
2016/09/05 Javascript
javascript中href和replace的比较(详解)
2016/11/25 Javascript
利用js来实现缩略语列表、文献来源链接和快捷键列表
2016/12/16 Javascript
浅谈Angular4实现热加载开发旅程
2017/09/08 Javascript
Node.js+jade抓取博客所有文章生成静态html文件的实例
2017/09/19 Javascript
JavaScript使用Math.random()生成简单的验证码
2019/01/21 Javascript
详解几十行代码实现一个vue的状态管理
2019/01/28 Javascript
基于layui table返回的值的多级嵌套的解决方法
2019/09/19 Javascript
微信小程序拖拽排序列表的示例代码
2020/07/08 Javascript
Vue单文件组件开发实现过程详解
2020/07/30 Javascript
vue中实现点击变成全屏的多种方法
2020/09/27 Javascript
[02:34]2016完美“圣”典风云人物:BurNIng专访
2016/12/10 DOTA
[01:09:19]DOTA2-DPC中国联赛 正赛 VG vs Aster BO3 第二场 2月28日
2021/03/11 DOTA
Python 快速实现CLI 应用程序的脚手架
2017/12/05 Python
numpy中矩阵合并的实例
2018/06/15 Python
python中slice参数过长的处理方法及实例
2020/12/15 Python
解决virtualenv -p python3 venv报错的问题
2021/02/05 Python
德国古洛迷亚百货官网:GALERIA Kaufhof
2017/06/20 全球购物
时尚设计师手表:The Watch Cabin
2018/10/06 全球购物
四个太阳教学反思
2014/02/01 职场文书
人事行政专员岗位职责
2014/07/23 职场文书
玩手机检讨书1000字
2014/10/20 职场文书
2015年计生工作总结范文
2015/04/24 职场文书
永不妥协观后感
2015/06/10 职场文书
基层工作经历证明
2015/06/19 职场文书
西部计划志愿者工作总结
2015/08/11 职场文书
golang interface判断为空nil的实现代码
2021/04/24 Golang