最初觉得公司前端做的非产品提的需求的demo没有很好的利用起来,于是想能不能将前端组服务器中的所有demo自动抓取出来,并放置到一个页面中。这样一是有利于前端demo管理,二是其他部门用的时候找起来也比较方便。
遍历文件夹
首先就是要遍历文件夹,获取所有文件夹里面的文件信息
function geFileList(path) {
var filesList = [];
readFile(path,filesList);
return filesList;
}
遍历读取文件
然后就需要将第一步中获取的文件信息读取出来
function readFile(path, filesList) {
files = fs.readdirSync(path);//需要用到同步读取
files.forEach(walk);
function walk(file)
{
states = fs.statSync(path+'/'+file);
if(states.isDirectory())
{
readFile(path+'/'+file,filesList);
}
else
{
//创建一个对象保存信息
var obj = new Object();
obj.size = states.size;//文件大小,以字节为单位
obj.name = file;//文件名
obj.path = path+'/'+file; //文件绝对路径
filesList.push(obj);
}
}
}
生成的filesList为一个包含服务器下所有文件的数组,其中数组中的每一个元素都是一个对象,包含name、size、path
属性。
匹配特定文件并生成包含title跟path的数组
var arr = [],str = '';
var regTitle = /<title>(.*?)<\/title>/i; //匹配文件的title
for(var i=0,len=filesList.length;i<len;i++){
var item = filesList[i];
if(item.name.indexOf("index.html") != -1){ //如果包含index.html
var data = fs.readFileSync(item.path);
var title = '"'+regTitle.exec(data)[1] +'"';
arr.push(title);
var url = '"www.zhangshuang.top/project' + item.path.slice(2) +'"';
arr.push(url);
}
}
str = 'arr = ['+arr+']';
写入文件
将内容用utf-8的格式写入文件,后续会有调用
function writeFile(fileName,data) {
fs.writeFile(fileName,data,'utf-8',complete);
function complete() {
console.log("文件生成成功");
}
}
writeFile("selfMotion_data.js",str); //第一个为自定义的生成的文件名,第二个为写入的数据
定时任务脚本
定时任务要感谢公司运维的小伙伴,之前在网上找了很多试了就是不行,结果是因为没有加执行的路径,现将shell脚本也贴出来:
/*bianli.sh*/
#!/bin/bash
cd /opt/node_server/public/project
/usr/bin/node /opt/node_server/public/project/bianli.js
记得一开始的cd进入项目目录一定要加上,要不然就不会执行。
启动定时任务
通过vim /etc/crontab
命令进入并编辑定时任务。
*/1 * * * * root /bin/sh /opt/node_server/public/project/bianli.sh
前面部分是定时任务的频率,最后部分是要执行的脚本。