let server = http.createServer((req,res)=>{
let {pathname} = url.parse(req.url);
// 根据请求路径查找文件
let absFilePath = path.join(__dirname,pathname);
fs.stat(absFilePath,(err,stat)=>{
if(err){
return res.end(`Not Found`);
}
if(stat.isDirectory()){
// 尝试查找index.html
absFilePath = path.join(absFilePath,'index.html');
fs.access(absFilePath,(err=>{
if(err){
res.end(`Not Found`);
}else{
let type = mime.getType(absFilePath);
res.setHeader('Content-Type',type+';charset=utf-8');
fs.createReadStream(absFilePath).pipe(res);
}
}));
}else{
let type = mime.getType(absFilePath);
res.setHeader('Content-Type',type+';charset=utf-8');
fs.createReadStream(absFilePath).pipe(res);
}
});
});
server.listen(3000);
类改写
let http = require('http');
let fs = require('fs').promises;
let {createReadStream} = require('fs');
let url = require('url');
let path = require('path');
let mime = require('mime');
class Server{
async handleServer(req,res){
let {pathname} = url.parse(req.url);
let absFilePath = path.join(__dirname,pathname);
try{
let statObj = await fs.stat(absFilePath);
if(statObj.isDirectory()){
absFilePath = path.join(absFilePath,'index.html');
}
this.sendFile(req,res,absFilePath,statObj);
}catch(err){
console.log(err);
this.sendError(req,res);
}
}
sendFile(req,res,absFilePath,statObj){
let type = mime.getType(absFilePath);
res.setHeader('Content-Type',type+';charset=utf-8');
createReadStream(absFilePath).pipe(res);
}
sendError(req,res){
res.statusCode = 404;
res.end(`Not Found`);
}
start(){
let server = http.createServer(this.handleServer.bind(this));
server.listen(...arguments);
}
}
let server = new Server();
server.start(3000);