读取node.js

时间:2018-02-09 03:46:43

标签: javascript node.js url

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

"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函数(<a href='"+item +"'>" + item + "</a></li>)引起的。我想在我的handleRequest函数中处理这个问题,因为这个函数可以对文件和目录进行分类,但没有运气。任何帮助赞赏!感谢

1 个答案:

答案 0 :(得分:0)

只需将目录添加到路径:

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

您需要在模块开头调用const path = require("path") - 但无论如何您迟早都需要这样做。