列表目录内容,如果在node.js中指定了目录路径

时间:2017-06-20 20:45:03

标签: javascript node.js apache static filesystems

我试图在我的node.js服务器上简单地提供静态文件。如果url栏中的路径链接到静态文件,我可以轻松完成此操作。但是,如果我试图列出目录内容,我需要使用node.js文件系统调用。我能够列出目录内容,但我想导航每个级别并根据需要获取内容。 类似于apache的默认功能,如果没有' index.html'在目录中,它将列出所有内容。

apache list directory contents

如何创建一个列出目录内容的简单html页面,并且可以单击以导航并提供服务?

具体来说我有一个我想要访问的日志文件夹。在该文件夹内是子目录,并分散各种日志。

这是我迄今为止尝试过的事情。

//inside server.js
// serve any static file inside my logs folder
app.use('/logs', express.static('logs'));
// routes.js
var logger = require('../controllers/s3logs');

app.get('/listlogs', function (req, res) {
        res.render('logpage', {logList : logger.findFiles()} );
    });
// controller s3logs.js
exports.findFiles = function(path)
exports.findFiles = function (path) {

if (path==undefined)
{
    path='logs';
}

var fileArray = fs.readdirSync(path); //get array of objects inside root dir
var fileObjArray = [];


// iterate through each file found in the directory
// find stats, make an obj, and push to new array

fileArray.forEach(function(item, index){
    const pathToItem =    path+'/'+item ;
    const stats = fs.statSync(pathToItem);

    var fileObj = {
        "name": item,
        "path": pathToItem,
        "isDir": stats.isDirectory(),
        "size": stats.size,
        "modified": stats.mtime
    };

    fileObjArray.push(fileObj);

    });

return fileObjArray;
};
//logpage.html
<body>
<ul>
    {% for file in loglist %}
    <li {% if loop.first %} class="first"{% endif %}>
        <a href= {{ file.path }}>{{ file.name }}</a>
    </li>
    {% endfor %}
</ul>
</body>

此代码正常工作,但我需要解决更深入遍历另一个目录的路径。再次调用我的功能。我可以通过邮寄请求解决这个问题,但我觉得这已经太复杂了...... 有什么建议吗?

1 个答案:

答案 0 :(得分:0)

如果指定的路径是目录,则使用服务静态中间件来提供我自己的自定义html。

var serveStatic = require('serve-static');


// serve static logs files
var serve = serveStatic('logs');

app.use('/logs', serve, function (req, res) {
    // console.log(req)
    res.render('logpage', {logList:s3logger.findFiles(req.originalUrl), currentPath: req.originalUrl} );
});