//用于处理文件系统内的文件,docroot选项指被存放文件所在文件夹的路径,读取该目录下的指定文件 var fs = require('fs'); var mime = require('mime'); var sys = require('sys'); exports.handle = function(req, res){ if (req.method !== "GET"){ res.writeHead(404, {'Content-Type': 'text/plain'}); res.end("invalid method " + req.method); } else { var fname = req.basicServer.container.options.docroot + req.basicServer.urlparsed.pathname; if (fname.match(/\/$/)) fname += "index.html"; //如果URL以/结尾 fs.stat(fname, function(err, stats){ if (err){ res.writeHead(500, {'Content-Type': 'text/plain'}); res.end("file " + fname + " not found " + err); } else { fs.readFile(fname, function(err, buf){ if (err){ res.writeHead(500, {'Content-Type': 'text/plain'}); res.end("file " + fname + " not readable " + err); } else { res.writeHead(200, {'Content-Type': mime.lookup(fname), 'Content-Length': buf.length}); res.end(buf); } }); } }); } }
faviconHandler.js
//这个处理函数处理对favicon.ico的请求 //MIME模块根据给出的图标文件确定正确的MIME类型,网站图标favicon可以是任何类型的图片,但是我们必须要告诉浏览器是哪个类型 //MIME模块,用于生成正确的Content-Type头 var fs = require('fs'); var mime = require('mime'); exports.handle = function(req, res){ if (req.method !== "GET"){ res.writeHead(404, {'Content-Type': 'text/plain'}); res.end("invalid method " + req.method); } else if (req.basicServer.container.options.iconPath !== undefined){ fs.readFile(req.basicServer.container.options.iconPath, function(err, buf){ if (err){ res.writeHead(500, {'Content-Type': 'text/plain'}); res.end(req.basicServer.container.options.iconPath + "not found"); } else { res.writeHead(200, {'Content-Type': mime.lookup(req.basicServer.container.options.iconPath), 'Content-Length': buf.length}); res.end(buf); } }); } else { res.writeHead(404, {'Content-Type': 'text/plain'}); res.end("no favicon"); } }
redirector.js
/* 把一个域的请求重定向到另一个上,例如将重定向到example.com上,或者使用简短的URL跳转到较长的URL 实现这两种情况,我们需要在HTTP响应中发送301(永久移除)或者302(临时移除)状态码,并且指定location头信息。有了这个组合 信号,web浏览器就知道要跳转到另一个web位置了 */ //地址:3000/l/ex1 会跳转到 var util = require('util'); var code2url = {'ex1': 'http://example1.com', 'ex2': "http://example2.com"}; var notFound = function(req, res){ res.writeHead(404, {'Content-Type': 'text/plain'}); res.end("no matching redirect code found for " + req.basicServer.host + "https://www.jb51.net/" + req.basicServer.urlparsed.pathname); } exports.handle = function(req, res){ if (req.basicServer.pathMatches[1]){ var code = req.basicServer.pathMatches[1]; if (code2url[code]){ var url = code2url[code]; res.writeHead(302, {'Location': url}); res.end(); } else { notFound(req, res); } } else { notFound(req, res); } }
docroot目录下:有favicon.png
index.html
<html> <head> </head> <body> <h1>Index</h1> <p>this is a index html.</p> </body> </html>