nodeJS 静态文件服务器源码

一个简单的nodeJS的静态文件服务器,目前还没有加入gzip和缓存

var server = require("http"),
	url = require("url"),
	path = require("path"),
	fs = require("fs"),
	mime = require("./mime").types;

// 处理客户端的请求
server.createServer(function (request, response) {
	var pathname = url.parse(request.url).pathname;
    var realPath = "app" + pathname;
    path.exists(realPath, function (exists) {
        if (!exists) {
            response.writeHead(404, {
                'Content-Type': 'text/plain'
            });
            response.write("访问路径没有找到。");
            response.end();
        } else {
            fs.readFile(realPath, "binary", function (err, file) {
                if (err) {
                    response.writeHead(500, {
                        'Content-Type': 'text/plain'
                    });
                    response.end(err);
                } else {
				    var ext = path.extname(realPath);
					ext = ext ? ext.slice(1) : 'html';
					var contentType = mime[ext] || "text/plain";
                    response.writeHead(200, {
                        'Content-Type': contentType
                    });
                    response.write(file, "binary");
                    response.end();
                }
            });
        }
    });
}).listen(9099);

//控制台中输出信息
console.log("Server is listening port 9099...");
另外还有一个mime.js用来支持MIME映射

/**
 * @author wangbin
 */

exports.types = {
	"aiff": "audio/x-aiff",
	"arj": "application/x-arj-compressed",
	"asf": "video/x-ms-asf",
	"asx": "video/x-ms-asx",
	"au": "audio/ulaw",
	"avi": "video/x-msvideo",
	"bcpio": "application/x-bcpio",
	"ccad": "application/clariscad",
	"cod": "application/vnd.rim.cod",
	"com": "application/x-msdos-program",
	"cpio": "application/x-cpio",
	"cpt": "application/mac-compactpro",
	"csh": "application/x-csh",
	"css": "text/css",
	"deb": "application/x-debian-package",
	"dl": "video/dl",
	"doc": "application/msword",
	"drw": "application/drafting",
	"dvi": "application/x-dvi",
	"dwg": "application/acad",
	"dxf": "application/dxf",
	"dxr": "application/x-director",
	"etx": "text/x-setext",
	"ez": "application/andrew-inset",
	"fli": "video/x-fli",
	"flv": "video/x-flv",
	"gif": "image/gif",
	"gl": "video/gl",
	"gtar": "application/x-gtar",
	"gz": "application/x-gzip",
	"hdf": "application/x-hdf",
	"hqx": "application/mac-binhex40",
	"html": "text/html",
	"ice": "x-conference/x-cooltalk",
	"ico": "image/x-icon",
	"ief": "image/ief",
	"igs": "model/iges",
	"ips": "application/x-ipscript",
	"ipx": "application/x-ipix",
	"jad": "text/vnd.sun.j2me.app-descriptor",
	"jar": "application/java-archive",
	"jpeg": "image/jpeg",
	"jpg": "image/jpeg",
	"js": "text/javascript",
	"json": "application/json",
	"latex": "application/x-latex",
	"lsp": "application/x-lisp",
	"lzh": "application/octet-stream",
	"m": "text/plain",
	"m3u": "audio/x-mpegurl",
	"man": "application/x-troff-man",
	"me": "application/x-troff-me",
	"midi": "audio/midi",
	"mif": "application/x-mif",
	"mime": "www/mime",
	"movie": "video/x-sgi-movie",
	"mp4": "video/mp4",
	"mpg": "video/mpeg",
	"mpga": "audio/mpeg",
	"ms": "application/x-troff-ms",
	"nc": "application/x-netcdf",
	"oda": "application/oda",
	"ogm": "application/ogg",
	"pbm": "image/x-portable-bitmap",
	"pdf": "application/pdf",
	"pgm": "image/x-portable-graymap",
	"pgn": "application/x-chess-pgn",
	"pgp": "application/pgp",
	"pm": "application/x-perl",
	"png": "image/png",
	"pnm": "image/x-portable-anymap",
	"ppm": "image/x-portable-pixmap",
	"ppz": "application/vnd.ms-powerpoint",
	"pre": "application/x-freelance",
	"prt": "application/pro_eng",
	"ps": "application/postscript",
	"qt": "video/quicktime",
	"ra": "audio/x-realaudio",
	"rar": "application/x-rar-compressed",
	"ras": "image/x-cmu-raster",
	"rgb": "image/x-rgb",
	"rm": "audio/x-pn-realaudio",
	"rpm": "audio/x-pn-realaudio-plugin",
	"rtf": "text/rtf",
	"rtx": "text/richtext",
	"scm": "application/x-lotusscreencam",
	"set": "application/set",
	"sgml": "text/sgml",
	"sh": "application/x-sh",
	"shar": "application/x-shar",
	"silo": "model/mesh",
	"sit": "application/x-stuffit",
	"skt": "application/x-koan",
	"smil": "application/smil",
	"snd": "audio/basic",
	"sol": "application/solids",
	"spl": "application/x-futuresplash",
	"src": "application/x-wais-source",
	"stl": "application/SLA",
	"stp": "application/STEP",
	"sv4cpio": "application/x-sv4cpio",
	"sv4crc": "application/x-sv4crc",
	"svg": "image/svg+xml",
	"swf": "application/x-shockwave-flash",
	"tar": "application/x-tar",
	"tcl": "application/x-tcl",
	"tex": "application/x-tex",
	"texinfo": "application/x-texinfo",
	"tgz": "application/x-tar-gz",
	"tiff": "image/tiff",
	"tr": "application/x-troff",
	"tsi": "audio/TSP-audio",
	"tsp": "application/dsptype",
	"tsv": "text/tab-separated-values",
	"txt": "text/plain",
	"unv": "application/i-deas",
	"ustar": "application/x-ustar",
	"vcd": "application/x-cdlink",
	"vda": "application/vda",
	"vivo": "video/vnd.vivo",
	"vrm": "x-world/x-vrml",
	"wav": "audio/x-wav",
	"wax": "audio/x-ms-wax",
	"wma": "audio/x-ms-wma",
	"wmv": "video/x-ms-wmv",
	"wmx": "video/x-ms-wmx",
	"wrl": "model/vrml",
	"wvx": "video/x-ms-wvx",
	"xbm": "image/x-xbitmap",
	"xlw": "application/vnd.ms-excel",
	"xml": "text/xml",
	"xpm": "image/x-xpixmap",
	"xwd": "image/x-xwindowdump",
	"xyz": "chemical/x-pdb",
	"zip": "application/zip"
};

这样就可以用了,可以先简单的用它做静态文件的访问使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值