使用nodejs搭建一个web服务器
//开启服务 监听端口
//导入核心内置模块
var http = require("http")
var url = require("url")
var fs = require("fs")
var path = require("path")
//导入自定义模块
var mime = require(__dirname+"/mime.js")
//开启服务 监听端口 接收请求 返回响应
http.createServer().on("request",function(req,res){
//解析请求路径
var urlInfo = url.parse(req.url)
//读取用户需要的文件内容 返回响应
// var content = fs.readFileSync("./src"+urlInfo.pathname)
//响应文件路径
var file = "./src"+urlInfo.pathname
//读取用户所需文件
fs.readFile("./src"+urlInfo.pathname,function(err,data){
if(err){
//找不到文件 响应404页面
file = "./src/404.html"
//读取404页面
var content = fs.readFileSync(file)
//响应404页面
res.statusCode = 404
res.statusMessage = "Not Found"
res.end(content)
}else{
//找到文件
//设置响应类型 获取当前文件后缀
var extname = path.extname(file)
//分支判断 设置对应响应头
// switch (extname) {
// case ".html":
// res.setHeader("Content-type","text/html;charset=utf-8")
// break;
// case ".jpg":
// res.setHeader("Content-type","image/jpg")
// break;
// case ".css":
// res.setHeader("Content-type","text/css")
// break;
// case ".ico":
// res.setHeader("Content-type","image/x-icon")
// break;
// default:
// res.setHeader("Content-type","text/plain;charset=utf-8")
// break;
// }
//利用mime模块函数帮助我们解决响应类型问题
res.setHeader("Content-type",mime(extname))
res.end(data)
}
})
}).listen(3000)
另外一个模块的
//负责根据文件后缀 返回响应头类型
//单个导出 导出一个函数 传入文件后缀 返回对应的文件类型
module.exports = function(extname){
//分支判断 设置对应响应头
switch (extname) {
case ".html":
return "text/html"
break;
case ".jpg":
return "image/jpeg"
break;
case ".css":
return "text/css"
break;
case ".ico":
return "image/x-icon"
break;
default:
return "text/plain;charset=utf-8"
break;
}
}