Node.js学习笔记(二)——静态资源文件

Node.js学习笔记(二)——静态资源文件

参考视频

实现一个小阿帕奇,自动为文件夹里面的文件、图片、css、js加上路由。

基本思想:用户输入什么url,就用fs去读取那个文件。

var http = require('http');
var url = require('url');
var fs = require('fs');
var path = require('path');
var querystring = require('querystring');
var PORT = 3000;

//mime类型映射关系对,拓展名:类型
//访问什么类型,content-type就对应是什么类型
var mime = {
	'.html': 'text/html; charset = UTF-8',
	'.css': 'text/css',
	'.js': 'application/x-javascript',
	'.jpg': "image/jpeg",
    '.gif': "image/gif",
    '.png': "image/png", 
};

http.createServer(function(req, res){
	//得到用户读取什么,比如用户输入http://127.0.0.1/a.html
	//就真的去读取这个文件(路由中不带文件夹,即把这个文件作为一个root)
	var pathname = url.parse(req.url).pathname;
	
	//得到拓展名,用来判断mime类型
	var extname = path.extname(pathname);
	
	if(!extname){
		//当用户输入无拓展名且不以/结尾时,此时会造成浏览器识别图片等路径层次有问题
		//比如http://127.0.0.1/b 和http://127.0.0.1/b/不一样,前者认为是同级目录下的图片,后者认为是b文件夹中的。
		if(pathname.substr(-1) != '/'){
			res.writeHead(302, {'Location': pathname + '/'});
		}
		//如果url不存在拓展名,表示这是一个文件夹,则为其补充/index.html
		pathname += '/index.html';
	}
	
	//真的去读取用户输入的这个文件
	fs.readFile('./' + pathname, function(err, data){
		if(err){
			res.end('Error! ');
			return;
		}
		
		//检查是否属于已知的mime类型
		if(mime.hasOwnProperty(extname)){
			res.setHeader('Content-Type', mime[extname]);
		}
		res.end(data);
	})

}).listen(PORT, function(){
	console.log('Server is listening on', PORT);
});

存在一个问题,304状态码not modified,当文件没有改变的时候,服务器304状态码,拒绝传输文件,上面的小程序无这样的识别,较复杂。

猜你喜欢

转载自blog.csdn.net/sinat_41918479/article/details/84779931