Node.js 实现目录浏览功能
目录浏览
// 目录浏览
// dir 需要提供目录浏览功能的目录
// dirname 本地路径 即__dirname
// bool 子目录是否提供浏览功能
app.dir = function (_dir, dirname, bool) {
// 使用上一章已经完成的路由功能
app.get(_dir, (req, res) => {
let html = "< head>< meta charset='utf-8'>< /head>";
try {
// 用户访问目录
let files = fs.readdirSync(dirname + _dir);
let fileName = null;
for (let i in files) {
if (path.extname(files[i]) === "" && bool === true) {
app.dir(_dir + '/' + files[i], dirname, bool)
}
fileName = files[i];
html += "< div>< a href='" +_dir + '/' + fileName + "'>" + fileName + "< /a>< /div>";
}
} catch (e) {
html += '您访问的目录不存在';
}
res.writeHead(200, {'content-type': 'text/html'});
res.end(html);
})
}
访问静态文件
// 处理静态文件函数
// res response对象
// pathName 静态文件相对路径
// ext 静态文件后缀
function handleStatic(res, pathName, ext) {
fs.exists(pathName, (exists) => {
if (!exists) {
res.writeHead(404, {'Content-Type': 'text/plain'});
res.write('The request url ' + pathName + ' was not found on this server');
res.end();
} else {
fs.readFile(pathName, (err, file) => {
if (err) {
res.writeHead(500, {'Cotent-Type': 'text/plain'});
res.end(err);
} else {
const ContentType = mime[ext] || 'text/plain';
res.writeHead(200, {'Cotent-Type': ContentType});
res.write(file);
res.end();
}
}
})
}
})
}