nodeJs读写流(读取json目录文件后,自定义写入新文件中)
json
适用于现代 C++ 的 JSON。
项目地址:https://gitcode.com/gh_mirrors/js/json
免费下载资源
·
需求:将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文件为空时进行过滤操作
代码段:
// MockData
gulp.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
GitHub 加速计划 / js / json
41.72 K
6.61 K
下载
适用于现代 C++ 的 JSON。
最近提交(Master分支:1 个月前 )
960b763e
4 个月前
8c391e04
6 个月前
更多推荐
已为社区贡献1条内容
所有评论(0)