我正在尝试读取子目录中的文件。
"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
函数中处理这个问题,因为这个函数可以对文件和目录进行分类,但没有运气。任何帮助赞赏!感谢
答案 0 :(得分:0)
只需将目录添加到路径:
html += files.map(function(item){
return "<li><a href='"+path.join(path, item) +"'>"
+ item +
"</a></li>";
}).join("");
您需要在模块开头调用const path = require("path")
- 但无论如何您迟早都需要这样做。