Node.js静态资源类文件请求处理

来源:互联网 发布:xp 在端口23连接失败 编辑:程序博客网 时间:2024/04/28 01:37

    转至黄华丹的Node.js开发实战讲解。了解资源的请求协议,以及cookie处理

/**顶层文件夹resource*静态的网页 创建一个view的文件夹*静态的CSS 创建一个style的文件夹*静态的图片 创建一个image的文件夹*//**  * version:2 添加了资源文件的缓存机制 * version3: 添加了jade处理*/var fs=require('fs');var CACHE_TIME=24*60*60*1000;//pathname表示服务器的请求,realPath表示实际路径exports.staticManage=function(pathname,realPath,res,req){fs.exists(realPath,function(exists){if(!exists){console.log(realPath);res.writeHead(404,{'Content-Type':'text/plain'});res.write('this request URL'+pathname+"was not found on this server");res.end();}else{//获取文件的最后修改时间var fileInfo=fs.statSync(realPath);var lastModified=fileInfo.mtime.toUTCString();var pointPosition=pathname.lastIndexOf('.');var mmieString=pathname.substring(pointPosition+1);var mimeType='';var cacheflg=false;//这里可以扩展MIME的类型switch (mmieString){case 'css':mimeType="text/css";cacheflg=true;break;case 'png':cacheflg=true;mimeType='image/png';break;case 'jade':mimeType="text/html";break;default:mimeType='text/plain';}//设置缓存if(cacheflg==true){var date=new Date();//can't set headers after they are sentdate.setTime(date.getTime()+CACHE_TIME);res.setHeader('Expires',date.toUTCString());res.setHeader('Cache-Control','max-age='+CACHE_TIME);}if(req.headers['if-modified-since'] && lastModified==req.headers['if-modified-since']){res.writeHead(304,"Not Modified");res.end();}else{/** *这里添加了jade处理 */if(mmieString=='jade'){res.render(pathname);return ;}fs.readFile(realPath,'binary',function(err,file){if(err){res.writeHead(500,{'Content-Type':'text/plain'});res.end(err);}else{res.setHeader('Last-Modified',lastModified);res.writeHead(200,{'Content-Type':mimeType});res.write(file,"binary");res.end();}});}}})}


0 0