FCPIPE 使用说明

创建时间:2014/1/13 10:46
更新时间:2014/1/13 12:39

FCPIPE 使用说明

第一步 安装

npm install fcpipe -g

// 如有需要 更新fcpipe

npm update fcpipe- g

第二步 配置

- 如果默认配置满足需求可以跳过配置步骤

- 参考后面的配置说明

第三步 启动服务

1. 启动本地edp服务

edp ws start

确认访问路径 http://127.0.0.1:8848/nirvana-workspace/nirvana/main.html

如果路径或端口不一致在配置文件中修改

2. 启动fcpipe

fcpipe

第三步 验证

1. 访问本地开发环境

http://fctest.baidu.com:8000/nirvana-workspace/nirvana/main.html

如果能够正常访问,说明fcpipe安装并启动成功

2. 访问后端服务器环境

http://fctest.baidu.com:8000/nirvana/main.html?userid=241458

检查后端服务器是否正常访问

3. 访问联调模式

http://fctest.baidu.com:8000/nirvana/main.html?userid=241458&mod=debug

访问联调模式与后端服务器的唯一区别就是在urlsearch部分加上&mod=debug

注意;为了保证登录正常;每次访问前最好先走后端服务器环境;直接走联调方式可能会遇到权限验证失败问题!




自定义配置


- fcpipe的自定义文件为 {workspace}/fcpipe-config.js
- 其中 {workspace}必须是命令启动的当前目录或父级目录;


使用自定义配置前必需理解以下个概念

- 规则模式 mod
默认有三种模式: 开发dev, 联调debug, 后端backend;
对应各种模式需要分别设定解析规则;

- 解析规则 rules
  • 解析规则列表是一个数组
  • 每个规则基本元素有{path, handler}两个属性;
  • path是字符串或正则表达式;
  • handler是一个函数;带有context, router两个参数,分别表示请求的上下文和路由规则
  • 规则列表按path先后顺序匹配, 一旦匹配成功,后面的规则不再解析;

- 处理方法 handler
  • handler是对请求的处理方法
  • handler的基本参数是context,
context.request表示请求对象;
context.response表示响应对象
  • - handler的第二个参数是router;
通过router可以获得指定的路由地址ip
  • extension.js 已经实现了几个基本的处理方法

- 自定义模式规则

  • getRules获取解析规则列表
  • 如果设定固定解析规则;设定 exports.rules即可
  • getRules根据参数request对象;返回一个规则数组;

参考如下:


    var modType = 'dev';
    exports.getRules = function(request) {
    var rules = require('./fengchao-rules');
    if (request.url.indexOf('nirvana/main.html') > -1 ) {
        if (request.url.indexOf('mod=debug') > -1) {
            modType = 'debug';
        } else if (request.url.indexOf('mod=dev') > -1
            || request.url.indexOf('workspace') > -1
        ) {
            modType = 'dev';
        } else {
            modType = 'backend';
        }
    }
    if (modType in rules) {
        return rules[modType];
    } else {
        return [];
    }
};


- 自定义解析规则

每项目规则包含两个属性path和handler

    rules.backend = [
    {
        path: 'log/fclogimg.gif',
        handler: logHandler
    },   
    {
        path: '/',
        handler: sendToEnd
    }

];

使用自定义方法可以加入复杂的处理逻辑


        {
        path: 'request.ajax',
        handler: function(context) {
            var request = context.request;
            var response = context.response;
            var req = require('url').parse(request.url, true);
            if (req.query.path == 'GET/nikon/abstract') {
                var rst = mockjson.generate();
                response.end(JSON.stringify(rst));
            } else {
                // 其它请求采用默认处理
                nextRule(context);
            }
        }
    }


- extension.js包含了多个已经实现的handler,请参考源码说明
  • proxyStatic 请求代理静态资源(支持url replace)
  • proxyRequest 请求动态请求或后端请求(动态绑定host,支持replace, dynamic-host)
  • getFile 代理文件输出(支持文件、单级文件夹内容)
  • printJSON 直接输出json对象
  • mockJSON 输出mockJSON结果


FCPPIPE原理介绍

FCPIPE使用前向代理方式解决fengchao测试环境、线下凤巢、线上凤巢前端联调、测试问题。


遇到的几个主要问题

1. 所有ajax请求及main.html必须通过UC验证后才能正确访问;

2. 权限验证要求path,host,port,castk必须合法;

3. Cookie refferer必须合法

4. 静态资源js/css/png等无需权限验证,但是只有asset可访问;

5. assetsrc的文件名、目录结构无法一一对应;

6. 模板文件、样式文件需要反向解析..

7.

各种失败方案

1. Fiddler前向代理 (需要设定大量反向解析规则)

2. Edp 反向代理 (无法设定规则)

3. Apache解析规则(规则约束大,权限无法绕过)

4. Proxy-部分模块代理(配置太复杂、通用性差)

FCPIPE 方案

1. 使用动态规则集合;根据请求自动模式解析

2. 自定义规则简单;支持扩展

3. 流程清晰;方面自定义扩展

4. 面向凤巢系统等商业系统的开发方式

FCPIPE流程