nodeJs读写流(读取json目录文件后,自定义写入新文件中)
来源:互联网 发布:纯粹主义 美学 知乎 编辑:程序博客网 时间:2024/06/05 03:17
需求:将data目录下的所有json文件中的内容,依次读取出来按照一定的规则封装后输出到MockData.js文件夹中
输出:
解决方法想到了3种方式:
1. 在MockData.js中,将mock函数的url先配置好请求链接,然后循环使用ajax请求得到json数据写入对应的数据模版中;(ajax的url不能和mock函数的url同名)
2. 在node环境中,将所有文件中的json数据依次读出来放入到一个新建的json文件中,然后对此json文件进行json对象转换解析,取出mock函数url对应的对象,再拼接封装出需要的格式;(适合json数据少且对象名不重复,json数据量大的话,解析成json对象的时候可能会崩掉)
3. 在node环境中,对data目录名进行读取,依次根据目录名读取json文件,对json文件中的每个json对象进行mock封装,直接输出到MockData.js文件中;根据开发需求,3是最优的解决方案,因此采用3
使用文件流的形式读写,且脑海中要有以下概念:
1. 流的data事件可能会被触发很多次
2. writeFile会覆盖已经存在的文件
3. 用highWaterMark设置来控制每次读取的大小
4. 在end中进行写操作
5. json文件为空时进行过滤操作
代码段:
// MockDatagulp.task('MockData', ['clean'], function () { var baseUrl = 'data'; var dataName = ''; var dataValue = ''; var appendData='' var mockJsFile = './scripts/plugins/mockData/MockData.js'; var fileReadStream; var files; if (fs.existsSync(baseUrl)) { //获取目录下的文件 files = fs.readdirSync(baseUrl); createStramFile(); } else { console.log(baseUrl + " Not Found!"); } fs.writeFileSync(mockJsFile,'define(\'MockData\', [\'jquery\', \'plugins/mockData/mock-min\'], function ($, Mock) {\n','utf8'); //同步写入 function createStramFile() { if (!(files.length)) { fs.appendFileSync(mockJsFile,'\n return {config: {isMock: true}};});','utf8') console.log('copy Done'); return; } var chunks=[]; var size =0; var _thisFile = files.shift(); var currentfile = baseUrl + '/' + _thisFile; fileReadStream = fs.createReadStream(currentfile, {highWaterMark:64 * 1024}); //highWaterMark控制每次读取的大小 fileReadStream.setEncoding('UTF-8'); fileReadStream.on('data',(chunk) => { //读取数据,可能会分几次读完 console.log('chunkLen:',chunk.length) if(typeof chunk != 'Buffer') chunk = new Buffer(chunk); chunks.push(chunk); size += chunk.length; }) fileReadStream.on('end',() => { //数据读完时写入 if(chunks.length){ var wholeJson = Buffer.concat(chunks,size) var records = JSON.parse(wholeJson); if(!records)return; for(var item in records){ dataName = item; dataValue = JSON.stringify(records[item]); appendData = 'Mock.mock("/'+_thisFile.replace('.json','')+'/'+dataName+'",'+dataValue+');\n' fs.appendFileSync(mockJsFile,appendData,'utf8') } }else{ console.log('Json文件为空!'); } createStramFile(); }) }});
参考博客:http://blog.csdn.net/mdifferent/article/details/51242484
阅读全文
0 0
- nodeJs读写流(读取json目录文件后,自定义写入新文件中)
- nodejs读写json文件
- nodejs 读取JSON文件写入txt中 fs.readFile&fs.writeFile
- 【python coding 2:文件读写】读取本地文件里的ip地址,循环写入到新的文件中
- FileStream 的文件读取与写入 之一(读写文件)
- nodejs-操作文件系统读取写入文件
- 文件部分-----(6 )二进制文件读写操作----将学生信息写入到文件中,再从文件中读取信息
- Android从文件目录中写入和读取图片
- 读取文件排序后写入文件
- Unity JSON文件的写入(序列化)与读取(反序列化)、以及自定义JSON编辑器
- [C++]读写txt文件和从txt文件中读取数据写入数组中
- 将JSON内容写入并读取文件
- Python 读取写入 json 格式的文件
- excel 读取模板,病写入新文件
- 文件部分-----(3)ASCII码文件读写操作----将学生信息写入到文件中,再从文件中读取信息
- Android读写文件 获取文件并读取写入数据
- 读取从a.txt中读取一个字符串,排序后写入b.txt文件中
- python读取一个目录下的文件,并且写入.txt文件中
- Linux-fork进程创建
- tomcat在eclipse中起动成功,主页却打不开
- IOS的runtime简述
- 小工具批量修改名字
- High CPU Dump收集工具
- nodeJs读写流(读取json目录文件后,自定义写入新文件中)
- Sqlite
- dubbo 线程池
- ASP.NET学习之Repeater
- JAVA多线程学习
- 学习selenium主要分六个阶段
- 用户登录时带上用户访问时的url
- JSON标准格式
- Android布局及其属性的使用