转载请注明:http://www.cnblogs.com/yufu/p/4054471.html
1 /** 2 *name: 自定义仿console.log 3 *function: 深度输出对象数据 4 *author: 梁快升 5 *department:无线公共支持touch FE 6 **/ 7 /* 8 var str = myConsole.log(data,false); 9 nodejs控制台输出:第一个参数为数据,第二个参数为是否格式化(可为空,默认为true) 10 11 var str = myConsole.logFileAdd('e:/log2.txt',data,false); 12 nodejs添加输出到文件 13 var str = myConsole.logFileNew('e:/log2.txt',data,false); 14 nodejs覆盖输出到文件 15 第一个参数为文件路径,第二个参数为数据,第三个参数为是否格式化(可为空,默认为true) 16 17 var str = myConsole.logHtml(data,true,false); 18 浏览器 输出到Html:第一个参数为数据,第二个参数为是否格式化(可为空,默认为true),第三个参数为是否添加节点到html(可为空,默认为true) 19 注意:若要设置第三个参数,则第二个参数必须显式设置 20 */ 21 22 /*注意:若在非node.js环境中使用,需要注释掉下面两句,否则会报错*/ 23 var fs = require('fs'); //node.js文件输出 24 var sys = require('sys'); //node.js控制台输出 25 26 var myConsole = function() {}; 27 myConsole.PRototype = { 28 log : Log, //nodejs控制台输出 29 logFileAdd : LogFileAdd, //nodejs添加输出到文件 30 logFileNew : LogFileNew, //nodejs覆盖输出到文件 31 logHtml : LogHtml //浏览器 输出到Html 32 } 33 34 /***************配置项****************************/ 35 var nextLine = '/r/n';//换行符号 36 var tabChar = ' ';//缩进符号 37 var _out_str = "";//缓存字符串 38 /*************************************************/ 39 40 /*****************全部组装完成后一起输出*********************************************/ 41 /*输出或者拼接*/ 42 var output = function (obj){ 43 _out_str += obj; 44 }; 45 /*拼接要输出的字符串*/ 46 function getOutStr(obj,isFormate){//isFormate是否缩进 47 _out_str = ''; 48 mylog(obj,1,isFormate); 49 printLn(true); 50 } 51 /*添加输出到文件*/ 52 function LogFileAdd(file,obj,isFormate){ 53 getOutStr(obj,isFormate); 54 saveFile(file,'a',_out_str); 55 return _out_str; 56 } 57 /*覆盖输出到文件*/ 58 function LogFileNew(file,obj,isFormate){ 59 getOutStr(obj,isFormate); 60 saveFile(file,'n',_out_str); 61 return _out_str; 62 } 63 /*控制台输出*/ 64 function Log(obj,isFormate){ 65 getOutStr(obj,isFormate); 66 sys.print(_out_str); 67 return _out_str; 68 } 69 /*html输出*/ 70 function LogHtml(obj,isFormate,isAddPre){//isAddPre是否添加到html,默认添加 71 getOutStr(obj,isFormate); 72 if(isAddPre == null)isAddPre = true; 73 if(isAddPre){ 74 var pre=document.createElement("pre"); 75 pre.className = "log-disp-pre"; 76 var node=document.createTextNode(_out_str); 77 pre.appendChild(node); 78 document.body.appendChild(pre); 79 // $('body').append('<pre class="log-disp-pre">'+ _out_str + '</pre>'); 80 } 81 return _out_str; 82 } 83 /***写入文件**************** 84 *type = 'a'为添加,'n'为覆盖 85 ***************************/ 86 var saveFile = function (file,type,content){ 87 switch(type){ 88 case 'a':{ 89 fs.appendFile(file, content, function (err) { 90 if (err) throw err; 91 console.log(file + ':It/'s saved append!'); //文件被保存 92 }); 93 break; 94 } 95 case 'n':{ 96 fs.writeFile(file, content, function (err) { 97 if (err) throw err; 98 console.log(file + ':It/'s saved new!'); //文件被保存 99 });100 break;101 }102 }103 };104 /***************************************************************************************/105 106 /******************不进行组装,一个个输出*************************/107 // var output = function (obj){108 // sys.print(obj);109 // // console.log(obj);110 // // process.stdout.write(obj);111 // };112 // function Log(obj,isFormate){113 // mylog(obj,1,isFormate);114 // printLn(true);115 // }116 /*******************************************/117 /*处理数据*/118 function mylog(obj,deep,isFormate){119 if(!deep)deep=1;120 switch(dataType(obj)){121 case 1:{122 output('"');123 output(obj);124 output('"');125 break;126 }127 // case 2:{128 // break;129 // }130 case 3:{131 output('"');132 output(obj.toString());133 output('"');134 break;135 }136 case 4:{137 output(obj);138 // if(obj){output(true);}else{output(false);}139 break;140 }141 // case 5:{142 // break;143 // }144 case 6:{145 output('{');146 printLn(isFormate);147 var num1 = 0,num2 = 0;148 for(var key in obj){num1++;}149 for(var key in obj){150 printSpace(deep,isFormate);151 output(key);152 output(':');153 printStr(' ',isFormate);154 mylog(obj[key],deep+1,isFormate);155 num2++;156 if(num2 < num1)output(',');157 printLn(isFormate);158 }159 printSpace(deep-1,isFormate);160 output('}');161 break;162 }163 case 7:{164 output('[');165 for(var j=0;j<obj.length-1;j++){166 printLn(isFormate);167 printSpace(deep,isFormate);168 mylog(obj[j],deep+1,isFormate);169 output(',');170 }171 if(obj.length > 0){172 printLn(isFormate);173 printSpace(deep,isFormate);174 mylog(obj[obj.length-1],deep+1,isFormate);175 printLn(isFormate);176 }177 printSpace(deep-1,isFormate);178 output(']');179 break;180 }181 default:{182 output(obj);183 break;184 }185 }186 };187 var printStr = function (str,isFormate){188 if(isFormate == null)isFormate = true;189 if(isFormate){190 output(str);191 }192 };193 var printSpace = function (deep,isFormate){194 for(var i=0;i<deep;i++){195 printStr(tabChar,isFormate);196 }197 };198 var printLn = function (isFormate){199 printStr(nextLine,isFormate);200 };201 var dataType = function (obj){202 var className = toString.call(obj);203 switch (className) {204 case '[object String]':205 return 1;206 case '[object Number]':207 return 2;208 case '[object Date]':209 return 3;210 case '[object Boolean]':211 return 4;212 case '[object RegExp]':213 return 5;214 case '[object Object]':215 return 6;216 case '[object Array]':217 return 7;218 }219 return 0;220 };221 module.exports = new myConsole();
转载请注明:http://www.cnblogs.com/yufu/p/4054471.html
新闻热点
疑难解答