return function() { if(!fs.existsSync(file)) { file = path.resolve(dir + path.sep + file); } edp.log.info('' + edp.chalk.yellow('PROXY') + ' ' + edp.chalk.green(url) + ' to ' + edp.chalk.green(file) ); return fs.readFileSync(file); };
/** * 判断请求是否需要代理,如果需要代理,返回代理的文件内容 * @param {http.ClientRequest} request */ function shouldProxy(request, gConf) { var referer = request.headers.referer; var tpls; if(referer) { var refs = urlLib.parse(referer, true); var query = refs.query.wd; var platform = refs.query.dsp || 'pc'; if(!query) { // 如果referer没有query,采用全局的 tpls = indexer.name2ConfMap; } else { var renderConf = indexer.getRenderConf(query, platform, gConf); if(!renderConf) { return; } tpls = util.extend({}, renderConf.left, renderConf.right); } } else { // 如果没有referer,则运行所有的规则 tpls = indexer.name2ConfMap; } var url = request.pathname; var config; var as; var item; var location; var i; for(var name in tpls) { config = indexer.name2ConfMap[name]; as = config.ajaxs; if(as && as.length > 0) { for(i = 0, l = as.length; i < l; i++) { item = as[i]; location = item.url; if ( false || (location instanceof RegExp && location.test(url)) || (typeof location === 'string' && path2RegExp( location, null, { sensitive: true } ).exec(url)) || (typeof location === 'function' && location( request ) ) ) { // 匹配成功 if(!item.handler && item.file) { request._proxyHandler = (function(file, dir) { return function() { if(!fs.existsSync(file)) { file = path.resolve(dir + path.sep + file); } edp.log.info('' + edp.chalk.yellow('PROXY') + ' ' + edp.chalk.green(url) + ' to ' + edp.chalk.green(file) ); return fs.readFileSync(file); }; })(item.file, config.fullpath); } else { edp.log.info(edp.chalk.yellow('PROXY ') + edp.chalk.green(url)); request._proxyHandler = item.handler; } return true; } } } } }