thinkjs/lib/Lib/Behavior/CheckResourceBehavior.js
2014-07-29 22:58:59 +08:00

45 lines
1.2 KiB
JavaScript

var fs = require('fs');
var mime = require('mime');
/**
* 静态资源请求
* @return {[type]} [description]
*/
module.exports = Behavior(function(){
'use strict';
return {
options: {
'url_resource_on': false
},
run: function(){
if (!global.RESOURCE_PATH || !this.options.url_resource_on || !this.http.pathname) {
return false;
}
var pathname = this.http.pathname;
if (pathname.indexOf('/') === 0) {
pathname = pathname.substr(1);
}
var reg = C('url_resource_reg');
//通过正则判断是否是静态资源请求
if (!reg.test(pathname)) {
return false;
}
var file = RESOURCE_PATH + '/' + 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();
}
//返回一个pendding promise, 不让后续执行
return getDefer().promise;
}
};
});