使用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;
    }
}

        
