使用nodejs搭建一个web服务器

作者: Darren 分类: nodejs 发布时间: 2019-06-13 22:31
//开启服务 监听端口
//导入核心内置模块
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;
    }
}

 

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注