三种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 相关文章推荐
前台js对象在后台转化java对象的问题探讨
Dec 20 Javascript
javascript实现浏览器窗口传递参数的方法
Sep 03 Javascript
javascript中AJAX用法实例分析
Jan 30 Javascript
javascript实现数独解法
Mar 14 Javascript
js实现简单div拖拽功能实例
May 12 Javascript
利用jquery实现验证输入的是否是数字、小数,包含保留几位小数
Dec 07 Javascript
jQuery中的类名选择器(.class)用法简单示例
May 14 jQuery
基于JS实现带动画效果的流程进度条
Jun 01 Javascript
vue.js编译时给生成的文件增加版本号
Sep 17 Javascript
jQuery zTree插件使用简单教程
Aug 16 jQuery
js实现内置计时器
Dec 16 Javascript
element中el-container容器与div布局区分详解
May 13 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
PHP 处理图片的类实现代码
2009/10/23 PHP
探讨:web上存漏洞及原理分析、防范方法
2013/06/29 PHP
CodeIgniter框架中_remap()使用方法2例
2014/03/10 PHP
PHP输出英文时间日期的安全方法(RFC 1123格式)
2014/06/13 PHP
PHP中文编码小技巧
2014/12/25 PHP
PHP中实现crontab代码分享
2015/03/26 PHP
PHP各种异常和错误的拦截方法及发生致命错误时进行报警
2016/01/19 PHP
javascript下对于事件、事件流、事件触发的顺序随便说说
2010/07/17 Javascript
ext中store.load跟store.reload的区别示例介绍
2014/06/17 Javascript
JavaScript中的alert()函数使用技巧详解
2014/12/29 Javascript
小巧强大的jquery layer弹窗弹层插件
2015/12/06 Javascript
jQuery插件Validate实现自定义校验结果样式
2016/01/18 Javascript
javascript中call apply 与 bind方法详解
2016/03/10 Javascript
jQuery使用each方法与for语句遍历数组示例
2016/06/16 Javascript
JS获取url参数、主域名的方法实例分析
2016/08/03 Javascript
BootStrap Typeahead自动补全插件实例代码
2016/08/10 Javascript
基于touch.js手势库+zepto.js插件开发图片查看器(滑动、缩放、双击缩放)
2016/11/17 Javascript
jQuery在header中设置请求信息的方法
2017/03/06 Javascript
详解vue服务端渲染浏览器端缓存(keep-alive)
2018/10/12 Javascript
从零开始在NPM上发布一个Vue组件的方法步骤
2018/12/20 Javascript
js找出5个数中最大的一个数和倒数第二大的数实现方法示例小结
2020/03/04 Javascript
[03:08]Ti4观战指南上
2014/07/07 DOTA
[01:11:21]DOTA2-DPC中国联赛 正赛 VG vs Elephant BO3 第一场 3月6日
2021/03/11 DOTA
Python随机生成数模块random使用实例
2015/04/13 Python
python单元测试unittest实例详解
2015/05/11 Python
python变量不能以数字打头详解
2016/07/06 Python
利用python写个下载teahour音频的小脚本
2017/05/08 Python
python3.5基于TCP实现文件传输
2020/03/20 Python
python 修改本地网络配置的方法
2019/08/14 Python
使用python脚本自动创建pip.ini配置文件代码实例
2019/09/20 Python
基于python实现简单网页服务器代码实例
2020/09/14 Python
Python+Opencv实现把图片、视频互转的示例
2020/12/17 Python
俄罗斯便宜的在线服装商店:GroupPrice
2020/04/10 全球购物
高级Java程序员面试题
2016/06/23 面试题
会计岗位职责范本
2015/04/02 职场文书
飞越疯人院观后感
2015/06/09 职场文书