首页 > 代码库 > node.js--静态文件请求模块
node.js--静态文件请求模块
【实现一个静态资源管理模块】
/** *static_module.js */var BASE_DIR = __dirname, //绝对路径 CONF = BASE_DIR + ‘/conf/‘, //conf文件的路径 STATIC = BASE_DIR + ‘/static‘, //静态文件的路径 mmieConf; //用来存储mmie json//文件及其相关mmie类型保存在mmie_type.json里,读取这个jsonvar getMmieConf = function(){ var conf = {}; try{ var confStr = fs.readFileSync(CONF + ‘mmie_type.json‘, ‘utf8‘);//同步读取文件 conf = JSON.parse(confStr); }catch{ util.debug(‘JSON parse fails‘); } return conf;};var util = require(‘util‘), fs = require(‘fs‘), http = require(‘http‘), url = require(‘url‘), path = require(‘path‘);mmieConf = getMmieConf();//获取静态文件的接口//pathname:静态文件相对路径 req:requset对象 res:response对象exports.getStaticFile = function(pathname, req, res){ var extName = path.extname(pathname); //path模块的extname方法可以获取url的文件后缀,例如‘.html‘ extName = extName ? extName.slice(1) : ‘‘; //‘html‘ var realPath = STATIC + pathname; var mmieType = mmieConf[extName] || ‘text/plain‘; fs.exists(realPath, function(exsit){ //判断文件是否存在 if( !exsit ){//如果不存在,返回404 res.writeHead(404, {‘Content-Type‘: ‘text/plain‘}); res.write(‘the file in‘ + pathname + ‘was not found‘); res.end(); }else{//如果文件存在,判断文件是否符合缓存条件,如果符合就返回304,不符合就读取静态文件返回 var fileInfo = fs.statSync(realPath); //fs.statSync获取文件相关信息,返回的是一个json,其中mtime属性记录了文件的最后修改时间 var lastModifiedTime = fileInfo.mtime.toUTCString(); //设置缓存相关的头 if(mmieConf[extName]){ var date = new Date(); res.setHeader(‘expires‘, date.toUTCString());//设置过期时间 res.setHeader(‘Cache-Control‘, ‘max-age=‘ + 60*60*24*365); } //判断是否过期,如果未过期就304,已过期就读取文件 if(req.headers[‘if-modified-since‘] && lastModifiedTime = req.header[‘if-modified-since‘]){//req对象中的header有记录文件的最后修改时间,如果和服务 //器的最后修改时间一致说明文件一直没有被改动过,304就好了 res.writeHead(304, ‘not modified‘); res.end(); }else{//读取静态文件 fs.readFile(realPath, ‘binary‘, function(err, file){ if(err){//读取文件出错啦 res.writeHead(500, ‘Content-Type:plain‘); res.end(err); }else{ res.setHeader(‘Last-Modified‘, lastModifiedTime); res.writeHead(‘200‘, {‘Content-Type‘: mmieType}); res.write(file, ‘binary‘); res.end(); } }) } } });}
使用这个模块:
var staticModule = require(‘./static_module‘);http.createServer(function(res, req){ var pathname = url.parse(req.url).pathname;//获取相对路径 if( pathname == ‘/favicon.ico‘){ return; }else if( pathname == ‘/index‘ || pathname == ‘/‘ ){ gotoIndex(); }else{ staticModule.getStaticFile(pathname, req, res); }});
node.js--静态文件请求模块
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。