一、功能实现
二、依赖库
- http:搭建HTTP服务器
- url:解析请求URL
- path:路径相关
- mime:打开文件
- fs:文件操作
- urlencode:url编码相关
三、源代码
//app.js
//导入所依赖的库
const var http = require("http");
const var url = require("url");
const var path = require("path");
const var mime = require("mime");
const var fs = require("fs");
const var urlencode = require('urlencode');
//服务器框架
http.createServer(function(req, res){
//获取路径名
var pathname = url.parse(req.url).pathname;
//URL解码,防止乱码
pathname = urlencode.decode(pathname, 'utf-8');
//排错
if(pathname == "/favicon.ico") return;
//获取根路径
finalpath = __dirname + pathname;
//如果文件存在:
fs.exists(finalpath,function(exists){
if(exists){
//如果是文件夹
if(fs.statSync(finalpath).isDirectory()){
//获取文件夹的文件结构
fs.readdir(finalpath,function(err,files){
//排错
if(err){
res.writeHead(200,{"Content-Type":'text/plain'});
res.end("<h1>404 page cannot be found</h1>");
}
//将文件结构写入页面
else{
var html = "<head><meta charset='utf-8'></head>";
var files = fs.readdirSync(finalpath);
//创建超链接打开文件
for (var i in files) {
var filename = files[i];
html += "<div><p>|-<a href='http://127.0.0.1:1314" +
pathname + '/'+ filename + "'>" + filename + "</a></p></div>";
}
res.writeHead(200, {'content-type': 'text/html'});
res.end(html);
}
})
}
//如果是文件
else if(fs.statSync(finalpath).isFile()){
//打开文件
fs.readFile(finalpath,function(err,data){
if(err) res.end("cannot read file!");
else {
res.writeHead(200,{"Content-Type":mime.getType(path.basename)});
res.end(data);
}
})
}
else{
res.writeHead(200,{"Content-Type":"text/html;charset=utf-8"});
res.end("<h1>404 page cannot be found!</h1>");
}
}
})
}).listen(1314);//设置监听端口
console.log("Listening...");
在CMD运行js即可开启服务器
node app.js
四、效果演示