早就听说了nodejs,说是很了不起,大家都说好,可以做的事情实在太多,而且语言是 js ,当时莫名的兴奋,好像自己很容易就能学会似的。于是尝试着写各种node,hello world就首当其冲的成为了我的node生涯的第一个程序。成功运行后,有点小小的得意,觉得也不过如此吧。
接下来的学习让我很快否定了'不过如此'的观点。也曾多次游走在百度搜狗、出没于各个论坛博客。几多尝试着用node做些事情的时候还是摸不到头脑,应该是自己没有沉下心来,就开始怀疑自己适不适合写 node ,几次放弃又拾起,只是因为不甘。
对于前端来说,会存在这很多重复的工作,而这些也是前端所不能容忍的,毕竟我们是脑力劳动者,是很成功人士的,哈哈,即使是大量的ctrl+c和ctrl+v也无异于是在干体力活。为了学习node和减少体力劳动,我自己开始想着使用node写个批处理文件的操作,历时近两天后终于完成,总的代码并不多,因为是新手,大量时间用来调试和修改代码,代码质量写的不高,和大神比起来也只能望其项背。但基本功能全部实现,用起来还是很方便,在感受node强大的同时,也让我对node重拾了信心,下面附上源码,欢迎指正。
需求说明:将动态改变 title 的内容,并且会在底部加上移动客服代码
/*
实现效果:
改变前
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<a href="#">这个标题会到 title 中</a>
<div>将动态改变 title 的内容,并且会在底部加上移动客服代码</div>
<!-- 代码 -->
</body>
</html>
改变后
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>这个标题会到 title 中</title>
</head>
<body>
<a href="#">这个标题会到 title 中</a>
<div>将动态改变 title 的内容,并且会在底部加上移动客服代码</div>
<!-- 代码 -->
这里是移动客服代码
</body>
</html>
*/
run.js:
/*
操作文件模块
*/
var fs = require('fs');
/*
解压文件模块
*/
// npm install unzip
var unzip = require('unzip');
// 定义个需要执行命令的 html 文件
var folder=[];
// 定义个盛放文件的数组
var fileList=[];
// 遍历指定文件夹中所有文件的方法
function walks(path){
var dirList = fs.readdirSync(path);
dirList.forEach(function(item){
if(fs.statSync(path + '/' + item).isFile()){
fileList.push(path + '/' + item);
}
});
dirList.forEach(function(item){
if(fs.statSync(path + '/' + item).isDirectory()){
walks(path + '/' + item);
}
});
}
// 初始状态
console.log('正在处理,请稍后...');
walks('.');
function ergodic1(){
fileList.forEach(function (filename) {
var t1=filename.lastIndexOf('/');
var catalog=filename.substring(0,t1+1);
if(filename.indexOf('.zip')!=-1&&filename.indexOf('wap/')==-1){
fs.createReadStream(filename).pipe(unzip.Extract({ path: catalog}));
fs.unlinkSync(filename);
}
})
}
function ergodic2(){
fileList=[];
walks('.');
fileList.forEach(function (filename) {
var t1=filename.lastIndexOf('/');
var catalog=filename.substring(0,t1+1);
if(filename.indexOf('.zip')!=-1&&filename.indexOf('wap/')!=-1){
fs.unlinkSync(filename);
}
// 获得需要操作的 html 文件
if(filename.indexOf('wap/')!=-1&&filename.indexOf('.html')!=-1){
folder.push(filename);
}
})
}
function ergodic3(){
if(!folder.length){
console.log('没有需要操作的文件...');
return;
}
var j=0;
while (j<folder.length) {
var opath=folder[j];
console.log(opath);
// 读取文件 路径/编码 注:这里读写文件使用同步
var data =fs.readFileSync(opath,'utf-8');
// 获得 title 中应该写入的文本
var result=data.substring(data.indexOf('<a href="#">')+12,data.indexOf('</a>'));
// 执行改变 title 文本
var dataText=data.replace('Document',result);
// 判断客服是否存在
if(dataText.indexOf('script></body>')==-1){
// 执行添加 移动客服代码
var dataText=dataText.replace('</body>','<script type="text/javascript"> var _bdhmProtocol = (("https:" == document.location.protocol) ? " https://" : " http://"); document.write(unescape("%3Cscript src=\'" + _bdhmProtocol + "hm.baidu.com/h.js%3Fa360d495157e0b98392c67f8a0629e0a\' type=\'text/javascript\'%3E%3C/script%3E")) </script></body>')
}
// 将修改后的文件写入源文件
fs.writeFileSync(opath,dataText,'utf-8');
j++;
}
console.log('恭喜,操作完成!!!');
}
ergodic1();
setTimeout(ergodic2, 2000);
setTimeout(ergodic3, 3000);
/*
优点:
一次运行,全部搞定。
使用文档:
0,放的文件名需要是 wap 或者解压后是 wap 。
1,放的文件可以和 run.js 同级,也可以在 run.js 的同级文件夹下面。
2,每个同级目录下只能放一个要处理的 wap 压缩包文件或者 wap 包文件。
3,wap 包中若存在压缩文件将自动删除。
4,放好需要做的文件后,将可以用三种方式运行 run.js
(0),.bat操作:双击 run.bat 即可。
(1),命令行:在该目录下,shift+右键->在此处打开命令窗口->输入 'node run.js',即可。
(2),sublime: 使用 sublime 打开 run.js ctrl+b 即可运行。
5,若出错误,请仔细参考前 3 条。
编辑于15/6/25
首发博客:http://www.yuanqiao.comxa.com/post-60.html
*/
/*
实现效果:将动态改变 title 的内容,并且会在底部加上移动客服代码
改变前
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<a href="#">这个标题会到 title 中</a>
<div>将动态改变 title 的内容,并且会在底部加上移动客服代码</div>
<!-- 代码 -->
</body>
</html>
改变后
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>这个标题会到 title 中</title>
</head>
<body>
<a href="#">这个标题会到 title 中</a>
<div>将动态改变 title 的内容,并且会在底部加上移动客服代码</div>
<!-- 代码 -->
这里是移动客服代码
</body>
</html>
*/
补充:
run.bat 文件(方便操作,也可不使用)
1,定义个.txt并写入 node run.js 保存在 run.js 同级目录下。
2,将后缀 .txt 改为 .bat。
3,双击 run.bat 文件即可运行 run.js
使用说明:
优点:
一次运行,全部搞定。
使用文档:
0,放的文件名需要是 wap 或者解压后是 wap 。
1,放的文件可以和 run.js 同级,也可以在 run.js 的同级文件夹下面。
2,每个同级目录下只能放一个要处理的 wap 压缩包文件或者 wap 包文件。
3,wap 包中若存在压缩文件将自动删除。
4,放好需要做的文件后,将可以用三种方式运行 run.js
(0),.bat操作:双击 run.bat 即可。
(1),命令行:在该目录下,shift+右键->在此处打开命令窗口->输入 'node run.js',即可。
(2),sublime: 使用 sublime 打开 run.js ctrl+b 即可运行。
5,若出错误,请仔细参考前 3 条。
作者疑惑:nodejs异步编程怎么才能避免使用setTimeout,即:发现不适用setTimeout会报错,node想要函数同步执行怎么做?
发表评论: