Node 实现 获取服务器文件信息(html 和 文件夹)

2 篇文章 0 订阅
1 篇文章 0 订阅

先直接上 node.js 的代码

const express = require("express");
const app = express();
const bodyParser = require("body-parser");
const fs = require("fs");
const path = require('path');
let json;

// 初始化 启动服务先拿一次数据
init();
// 解决跨域问题
app.all('/*', function (req, res, next) {
    //设为指定的域
    res.header("Access-Control-Allow-Origin", "*");
    res.header('Access-Control-Allow-Headers', 'Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild');
    res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
    res.header("X-Powered-By", ' 3.2.1')
    res.header("Content-Type", "application/json;charset=utf-8");
    next();
});

// get获取数据
app.get('/api/getGameJson',bodyParser.json(),function (req, res){
    res.json(json);
    // 第一版访问量低, 未做优化, 所以每次有人访问都会重新遍历一次文件信息
    init(); 
})
//  监控18888 端口
app.listen('18888',function(){
})

function init(){
    json = {
        "urlData":[]
    };
    // 解析需要遍历的文件夹,我这以 /var/www/html/game/ 目录为例
    const filePath = path.resolve('/var/www/html/game/');
    // 调用文件遍历方法 
    fileDisplay(filePath);
}

/**
 * 文件遍历方法
 * @param filePath 需要遍历的文件路径
 */
function fileDisplay(filePath){
    // 根据文件路径读取文件,返回文件列表
    fs.readdir(filePath,function(err,files){
        if(err){
            console.warn(err)
        }else{
            // 遍历读取到的文件列表
            files.forEach(function(filename){
                // 获取当前文件的绝对路径
                var filedir = path.join(filePath,filename);
                // 根据文件路径获取文件信息,返回一个fs.Stats对象
                fs.stat(filedir,function(eror,stats){
                    if(eror){
                        console.warn('获取文件stats失败');
                    }else{
                        var isFile = stats.isFile(); // 是文件
                        var isDir = stats.isDirectory();// 是文件夹
                        if(isFile){
                           // 看是否含有 index.html 
                            if(filedir.includes('/index.html')){
                            	// 含有的话 就把信息push 到数组内。
                                fs.readFile(filedir,(error, data) => {
                                    if(error){
                                        console.log('获取信息失败');
                                    }else{
                                        json.urlData.push(
                                            {
                                            	// url 路径
                                                "url": filedir.split('/html/')[1],
                                                // index.html  <title> 标签内的文本
                                                "title": data.toString().split('<title>')[1].split('</title>')[0],
                                                // 文件的修改时间
                                                "update": new Date(fs.statSync(filedir).mtimeMs).toLocaleString(),
                                                // 文件下资源目录的指定图片  (也可通过url 来读取 )
                                                "gameImg": filedir.split('/html/')[1].split('/index.html')[0] + '/resource/assets/index.png'
                                            }
                                        );
                                    }
                                });
                            }
                        }
                        if(isDir){
                            fileDisplay(filedir); // 递归,如果是文件夹,就继续遍历该文件夹下面的文件
                        }
                    }
                })
            });
        }
    });
}

实现功能后发现 nodejs 会周期性崩溃 , 解决方案是 [sudo] npm install forever 通过 forever 来进行 进程守护。

启动
cd 你的项目路径
forever start -a bin/www
forever start -a app.js

关闭
cd 你的项目路径
forever stop -a bin/www
forever stop -a app.js

利用json启动项目
forever start ./forever/config.json

npm install forever -g #安装
forever start app.js #启动应用
forever stop app.js #关闭应用
forever restartall #重启所有应用

具体的 forever 功能大家可以自己去查一下

在这里插入图片描述

最后实现的前端页面 给大家看一下。 以后再上传文件的信息 就会自动在这里更新了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值