Skip to content

静态资源文件请求的处理 #62

@Yangxiaqing

Description

@Yangxiaqing

MIME类型

每一种资源文件都有自己的标识类型,
例如:
HTML文件的MIME类型是text/html
CSS文件的MIME类型是text/css
TXT文件的MIME类型是text/plain

var http = require("http");
var fs = require("fs");
var url = require("url");

//->创建一个服务
var server1 = http.createServer(function (req, res) {
	//->解析客户端请求地址中的文件的目标名称以及传递给当前服务器的数据内容
	var urlObj = url.parse(req.url, true);
	var pathname = urlObj["pathname"];
	var query = urlObj["query"]; 

	//->处理静态资源文件的请求(HTML、CSS、JS。。。):=>"前端路由"
	var reg = /\.(HTML|JS|CSS|JSON|TXT|ICO)/i;
	if (reg.test(pathname)) {
		var suffix = reg.exec(pathname)[1].toUpperCase();
		//->根据请求文件的后缀名获取到当前文件的MIME类型
		var suffixMIME = "text/plain";
		switch (suffix) {
			case "HTML":
				suffixMIME = "text/html";
				break;
			case "CSS":
				suffixMIME = "text/css";
				break;
			case "JS":
				suffixMIME = "text/javascript";
				break;
			case "JSON":
				suffixMIME = "application/json";
				break;
			case "ICO":
				suffixMIME = "application/octet-stream";
				break;
		}
		//->按照指定的目录读取文件中的内容或者代码(读取出来的内容都是字符串格式的)
		//->如果客户端请求的资源文件不存在,我们不加try catch服务会终止,这样不好;
		//所以我们添加try catch捕获异常信息,这样即使不存在,服务也不会报错,同样也不会终止
		try {
			var conFile = fs.readFileSync("." + pathname, "utf-8");

			//->重写响应头信息:
			//告诉客户端的浏览器我返回的内容是什么样的MIME类型 && 指定返回的内容格式是utf-8编码,返回的中文汉字就不会出现乱码了
			res.writeHead(200, {'content-type':'suffixMIME + ;charset=utf-8;'});
			//->服务端向客户端返回的内容应该也是字符串
			res.end(conFile);
		} catch (e) {
			res.writeHead(404, {'content-type':'text/plain;charset=utf-8;'});
			res.end("request file is not found!");
		}
	}

	/*if (pathname === "/index.html") {
		var con = fs.readFileSync("./index.html", "utf-8");
		res.end(con);
		return;
	}
	if (pathname === "/css/index.css") {
		con = fs.readFileSync("./css/index.css", "utf-8");
		res.end(con);
		return;
	}
	if (pathname === "/js/index.js") {
		con = fs.readFileSync("./js/index.js", "utf-8");
		res.end(con);
		return;
	}*/


});
//->为当前的这个服务配置端口
server1.listen(3000, function () {
	console.log("server is create success,listening on 3000 port!");
});

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions