Exemple #1
0
 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);
 };
Exemple #2
0
/**
 * 判断请求是否需要代理,如果需要代理,返回代理的文件内容
 * @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;
                   }
            }
        }
    }

}