【问题标题】:Reading files in subdirectory in node.js在 node.js 的子目录中读取文件
【发布时间】:2018-07-19 18:57:31
【问题描述】:

我正在尝试读取子目录中的文件。

"use strict";
const PORT = 8080;
const http = require('http');
const fs = require('fs');
const url = require('url');
const path = require('path');
function serverFile(path, res){
    //async method
    fs.readFile(path, function(err, data){
        if(err) {
             console.error(err);
             res.statusCode = 500;
             res.end("Server error: Could not read file");
             return;
        }
        //at this point, there is no error
        res.end(data);
    });
}
function serveDirectory(newPath, res){
    fs.readdir(path, function(err, files){
        if(err){
            console.error(err);
            res.statusCode = 500;
            res.end("Server Error: ");
        }
        var html = "<p> Index of " + path + "</p>";
        html += "<ul>";
        html += files.map(function(item){
            return "<li><a href='"+path.join(newPath, item) +"'>" + item + "</a></li>";
        }).join("");
        html += "</ul>";
        res.end(html);
    });  
}
/**
 * @function handleRequest 
 * Request handler for our http server
 * @param {http.ClientRequest} req - the http requeset object
 * @param {http.ServerResponse} res - the http response object
 */
function handleRequest(req, res){
    /*console.log(req.url);
    var path = "public" + req.url;*/
    var temp = url.parse(req.url, true).pathname;
    var aPath = 'public'+temp;
    fs.stat(aPath, (err, stats) =>{
        if(err){
            console.error(err);
            res.statusCode = 500;
            res.end("fs.stat error");
            return;
        }
        if(stats.isDirectory()){
            serveDirectory('public'+req.url+'/', res);
        }
        if(stats.isFile()){
            serverFile(aPath, res);

        }
    })
} 
var server = http.createServer(handleRequest);
server.listen(PORT, function(){
    console.log("Listening on port "+PORT);
});

进入子目录后,我可以看到我的文件列表。然而,他们的地址是它本身,而不是subdirectory/file。我知道这是由我的serveDirectory 函数(&lt;a href='"+item +"'&gt;" + item + "&lt;/a&gt;&lt;/li&gt;)引起的。我想在我的handleRequest 函数中处理这个问题,因为这个函数可以对文件和目录进行分类,但没有运气。任何帮助表示赞赏!谢谢

【问题讨论】:

    标签: javascript node.js url


    【解决方案1】:

    只需将目录添加到路径:

        html += files.map(function(item){
            return "<li><a href='"+path.join(path, item) +"'>" 
             + item + 
            "</a></li>";
        }).join("");
    

    您需要在模块开始时致电const path = require("path") - 但无论如何您迟早都需要这样做。

    【讨论】:

    • 你把const path = require("path")放在文件开头了吗?如果你这样做了,你的 node.js 版本是什么?
    • 我的是 v9.4.0。我添加了const path = require("path") 并使用了这个path。有join功能,但是path.join(newPath, item)不好用。
    猜你喜欢
    • 2021-11-29
    • 2015-02-19
    • 2022-10-04
    • 1970-01-01
    • 2014-11-10
    • 1970-01-01
    • 2013-02-28
    • 2011-09-27
    • 1970-01-01
    相关资源
    最近更新 更多