thinkjs/lib/Lib/Behavior/CheckResourceBehavior.class.js
2014-01-10 07:16:48 +08:00

47 lines
1.2 KiB
JavaScript

var path = require("path");
var fs = require("fs");
var mime = require("mime");
/**
* 静态资源请求
* @return {[type]} [description]
*/
module.exports = Behavior(function(){
return {
options: {
'url_resource_on': false,
'url_resource_suffix': []
},
run: function(){
if (!RESOURCE_PATH || !this.options.url_resource_on || !this.http.pathname) {
return false;
};
var extname = path.extname(this.http.pathname);
if (!extname) {
return false;
};
extname = extname.toLowerCase();
if (extname.substr(0, 1) === '.') {
extname = extname.substr(1);
};
//如果不在配置列表里,则不为静态资源请求
if (this.options.url_resource_suffix.indexOf(extname) === -1) {
return false;
};
var file = RESOURCE_PATH + "/" + this.http.pathname;
var res = this.http.res;
if (fs.existsSync(file)) {
var contentType = mime.lookup(file);
var fileStream = fs.createReadStream(file);
res.setHeader("Content-Type", contentType + ";charset=" + C('encoding'));
fileStream.pipe(res);
fileStream.on("end", function(){
res.end();
})
}else{
res.statusCode = 404;
res.end();
}
return getDefer().promise;
}
}
})