{"./":{"url":"./","title":"Read Me","keywords":"","body":"freemarker server ftl-node 是一个通过界面可配置的前静态资源服务器。其可对某个目录进行配置成为一个可访问的服务目录，针对目录下的所有ftl文件（后缀以.ft结尾的文件freemarker编译后返回编译内容） 支持代理功能，当开启代理功能后可以当代理服务器使用 具体功能 访问freemarker，即以.ftl结尾的文件则自动编译成html返回 访问前端资源，即以.js, css等结尾的文件自动添加文件类型返回文件 采用界面配置当前的项目目录，可同时配置多个项目目录，并且同时运行 可动态切换当前的服务目录，及静态资源的目录 freemarker的错误日志会在浏览器端的调试工具中 以console.warn打印出来 支持java的request对象的部分方法直接获取数据(为什么会有这个，因为在struts2等框架中，前端人员可以直接访问request对象，在某些紧急情况下，可能需要前端获取参数或者获取ua去做一些判断) 支持代理功能，可当成代理服务器使用 支持代理服务器的转发功能，可对转发域名做指定的转发处理 可以通过简单配置在页面中嵌入 werinre 可以禁止页缓存 更新 更新日志 License MIT "},"docs/install.html":{"url":"docs/install.html","title":"安装","keywords":"","body":"安装 # 安装命令 npm install ftl-node -g # 帮助命令 ftl-node -h "},"docs/base.html":{"url":"docs/base.html","title":"基础用法","keywords":"","body":" 控制台输入命令 ftl-node 浏览器打开地址 http://127.0.0.1:8001/manager.html 配置界面 通过界面ui配置静态资源和ftl的目录位置 访问 http://127.0.0.1 访问刚才配置的目录下的静态资源和ftl文件 "},"docs/advance.html":{"url":"docs/advance.html","title":"高级用法","keywords":"","body":"高级用法 服务器端口 ui界面端口 服务器类型 日志级别修改 run.config.js 配置文件 代理服务器使用 界面配置相关 "},"docs/advance/port.html":{"url":"docs/advance/port.html","title":"服务器端口","keywords":"","body":"端口设置 # 可以通过参数 -p 设置端口 # 将服务器http的访问端口修改成8080 ftl-node -p 8080 # 如果同时开https服务器，可以用逗号分隔，一个表示http端口，一个表示https端口 ftl-node -p 8080,8081 服务器类型修改 "},"docs/advance/uiPort.html":{"url":"docs/advance/uiPort.html","title":"ui界面端口","keywords":"","body":"ui界面端口修改 # 可以通过参数 -u 设置端口 # 将ui界面的端口修改成8030, ui界面的访问地址变成 http://127.0.0.1:8030/manager.html ftl-node -u 8030 "},"docs/advance/serverType.html":{"url":"docs/advance/serverType.html","title":"服务器类型","keywords":"","body":"服务器类型 ftl-node 同时支持 http,https的服务器，http服务器默认打开，如果需要打开 https服务器可以通过以下命令 服务器端口修改 # 同时打开http服务器和https服务器 ftl-node -t all # 只打开 https服务器 ftl-node -t https "},"docs/advance/log.html":{"url":"docs/advance/log.html","title":"日志级别修改","keywords":"","body":"log基本控制 # log级别有 error, warn, info, verbose, debug, silly # 通过 -l 参数设置 ftl-node -l error "},"docs/advance/run-config.html":{"url":"docs/advance/run-config.html","title":"run.config.js说明","keywords":"","body":"run.config.js配置 每个项目的根目录下可以有个run.config.js用于配置该项目 run.config.js主要功能有 命令调用 ftl假数据配置 ftl版本的配置 简单路由转发配置 ajax假数据配置 设置是否转义ftl输出变量完整配置文件 var config = { // 要运行的命令(在节目配置中可以点按钮调用该命令) start: 'npm run start', // freemarker jar包得版本，这个版本号码程序中内置的版本号码，也可以是一个 绝对路径的jar包 jarVersion: '2.3.23', routes: [{ test: /(.*)\\.\\w{10}\\.([^\\.]+)$/, redirect: '$1.$2' }], // 是否开启 ftl假数据功能 isMockFtl: true, //是否在ftl文件中转义输出变量，true转义，这个选项只有在freemarker版本大于等于 2.3.24时才生效 ftlFormat: false, // ftl假数据注入规则函数 mockFtl: [{ test: /.*/, redirect:function(url, queryString) { var base = \"http://idoc.ms.netease.com/mock/getMockData.html?userName=jxcao&dateConvert=true&requestUrl=\"; // var domain = \"http://g.caipiao.163.com\"; var domain = \"http://888.163.com\"; // console.log(base + domain + url); if (/^http/.test(url)) { return url + \"?\" + queryString; } return base + domain + url; } }], // 是否开启 ajax假数据功能 isMockAjax: true, // ajax 假数据注入规则 mockAjax: [{ test: /.*/, redirect: function(path, visitDomain, queryString) { var ip = /^http:\\/\\/\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}.\\d{1,3}/; var domain = visitDomain; //使用ip访问的 if (ip.test(visitDomain)) { domain = \"http://g.caipiao.163.com\"; // domain = \"http://888.163.com\"; } console.log(queryString); var base = \"http://idoc.ms.netease.com/mock/\" + \"getMockData.html?userName=jxcao&requestUrl=\"; console.log(base + domain + path); return base + domain + path; } }] }; module.exports = config; "},"docs/advance/run-config/cmd.html":{"url":"docs/advance/run-config/cmd.html","title":"命令调用","keywords":"","body":"命令调用 run.config.js下root节点添加 start表示命令调用，根据不同得系统可以调用不同得命令 命令会在ui界面中的项目配置面板下，点击start开启命令，点击 stop停止命令, 具体请看ui界面配置 命令配置 { start: 'ls -l' } "},"docs/advance/run-config/ftl-mock.html":{"url":"docs/advance/run-config/ftl-mock.html","title":"ftl假数据配置","keywords":"","body":"ftl假数据说明 ftl假数据实现原理 ftl假数据主要是通过获取到用户设置的json文件，将json文件下地跟属性都转换成java得数据类型，在注入到ftl环境中得根节点中 ftl假数据分为远程假数据和本地假数据2种 本地假数据 在写ftl文件中加入 mock1.ftl.js是一个标准的node模块，需要到处一个对象，对象的节点将注入到 ftl中 如果存在多个假数据文件，有键值重名的将会被覆盖 远程假数据(可以将假数据托管在第三方平台或者其他系统中) 远程假数据在run.config.js中添加 在run.config.js中root下配置 isMockFtl，值设置为true,只有是true才开启假数据功能 在run.config.js中root下配置 mockFtl mockFtl是一个数组，数组下面是规则，同样规则通过test正则匹配，匹配成功执行redirect方法，redirect要求返回假数据的urlvar config = { isMockFtl: true, mockFtl: [{ test: /.*/, redirect:function(url, queryString) { var base = \"http://idoc.ms.netease.com/mock/getMockData.html?userName=jxcao&dateConvert=true&requestUrl=\"; // var domain = \"http://g.caipiao.163.com\"; var domain = \"http://888.163.com\"; // console.log(base + domain + url); if (/^http/.test(url)) { return url + \"?\" + queryString; } return base + domain + url; } }] }; module.exports = config; "},"docs/advance/run-config/ftl-version.html":{"url":"docs/advance/run-config/ftl-version.html","title":"freemarker版本的配置","keywords":"","body":"ftl版本的配置 由于不同得freemarker的jar包，会有很大的不同，所以添加一个功能是设置当前编译ftl文件所用得jar包版本 系统内置几个版本的jar包放代码在lib/jar下 不建议修改 lib/jar的jar包 修改jar包得方式 run.config.js root下添加 jarVersion 添加指定版本 如 2.3.18,2.3.23,2.3.25 添加jar包路径 如: '/usr/test/test.jar' { jarVersion: 2.3.25|'/usr/test/test.jar' } "},"docs/advance/run-config/routes.html":{"url":"docs/advance/run-config/routes.html","title":"简单路由转发配置","keywords":"","body":"简单路由配置 通过run.config.js中root节点下的routes控制简单路由 如 { // 接受一个数组作为每一项表示一个配配置 // 每个配置有test正则取匹配访问的url // 匹配成功执行redirect，redirec必须返回 url，redirect 可以使一个字符串，promise或者fun routes: [{ test: /.*/, redirect: '$1' },{ test: /aaa.*/, redirect: function () { return 'url'; } },{ test: /aaa.*/, redirect: new Promise(function (resolve) { resolve(url); }) }] } "},"docs/advance/run-config/ajax-mock.html":{"url":"docs/advance/run-config/ajax-mock.html","title":"ajax假数据配置","keywords":"","body":"ajax假数据说明 ajax假数据实现原理 ajax假数据主要是通过 拦截 xmlHttpRequest对象，获取到当前请求ajax的路径，然后修改成系统内置的路径，系统内置路径会请求 run.config.js中配置的规则，通过规则获取数据 在run.config.js的root下设置 isMockAjax 为true开启ajax请求 在run.config.js的root下设置 mockAjax 设置规则 mockAjax是一个数组，数组下面是规则，同样规则通过test正则匹配，匹配成功执行redirect方法，redirect要求返回假数据的url{ isMockAjax: true, mockAjax: [{ test: /.*/, redirect: function(path, visitDomain, queryString) { var ip = /^http:\\/\\/\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}.\\d{1,3}/; var domain = visitDomain; //使用ip访问的 if (ip.test(visitDomain)) { domain = \"http://g.caipiao.163.com\"; // domain = \"http://888.163.com\"; } console.log(queryString); var base = \"http://idoc.ms.netease.com/mock/\" + \"getMockData.html?userName=jxcao&requestUrl=\"; console.log(base + domain + path); return base + domain + path; } }] } "},"docs/advance/run-config/escape.html":{"url":"docs/advance/run-config/escape.html","title":"设置是否转义ftl输出变量","keywords":"","body":"设置转义 在freemarker中有一总开关，可以设置页面上的输出变量是否转义，这个值可以在run.config.js中配置 freemaker文档 该配置仅在freemarker版本大于2.3.24才有效 如 { // true 为 转义，false为不转义 ftlFormat: true } "},"docs/advance/proxy.html":{"url":"docs/advance/proxy.html","title":"代理服务器使用","keywords":"","body":"自动代理说明 自动代理， 即当访问的地址经过ftl-node，但是 规则匹配没有匹配上的时候，会自动代理到代理服务器配置的 地址上再次寻找资源。 上图中 通过 代理服务器开关 控制当前代理的 通过host配置去配置服务器的代理 执行流程解析 一个url地址 经过 flt-node 首先走规则，如果规则匹配成功，则直接返回匹配成功的地址, 如果没有匹配到，并且代理服务器打开，则进入代理服务器 进入代理服务器后，会根据代理服务器的配置走 (如果是用ip,或者localhost，代理就无效), 没有配置，会去在线找 具体代理规则请看 https://github.com/jianxcao/catproxy "},"docs/advance/ui.html":{"url":"docs/advance/ui.html","title":"界面配置相关","keywords":"","body":"界面配置 第一步 控制台输入命令 ftl-node 打开url地址 http://127.0.0.1:8001/manager.html 看到如下界面 第二步 在弹窗中写入分组的名称 点击确定关闭弹窗 第三步 点击新建分支弹窗 选择一个分组或者新建一个分组 写入分支名称 点击确定 第四部 可以看到上面的步骤会生成一个左侧的菜单 分组表示大类别，分支表示当前的一个项目 点击一个分支 点击新建路径，产生项目的一个路径 在项目根路径中填入项目的根路径 在路径还可填入相对路径 在虚拟路径中填入虚拟的路径，即不是真实的磁盘路径，而是部分虚拟的路径,系统会自动将虚拟路径与实际路径合并 点击应用，或者用快捷键ctrl + S, cmd + s 浏览器访问 http://127.0.0.1 第五部 多个分组，分支的处理 鼠标悬浮到分组或者分支上可以看到2个按钮，分别表示删除和禁止使用 点击删除将删除分组或者分支，点击禁止使用将禁止使用分支，或者分组 右侧每个分支的每个路径也可以删除或者禁止使用 注意每个操作结束后必须点击保存或者ctrl + S，才能生效 注意路径的执行顺序，谁在最上面谁就先匹配先执行，如果路径冲突，建议禁用其中暂时不用的路径 左侧分支和分组可以拖动排序,通过拖动排序改变优先级 右侧每个分支的路径也可以通过拖动排序改变优先级 1.4版本以上 双击某个分支，可以直接切换到该分支，并且禁用其他分支 "},"docs/advance/tip.html":{"url":"docs/advance/tip.html","title":"重要提示","keywords":"","body":"\b重要提示 环境依赖于nodejs,最低版本4.0.0 环境依赖java的jdk或者jre 配置文件将记录于系统缓存文件中，请确保运行时有对系统缓存目录修改的权限,并注意如果缓存目录清除，将会删除配置文件 mac下会记用户的sudo密码,记录在临时文件中 支持request调用的方法 ${request.getRequestURI()} ${request.getRequestURL()} ${request.getCookies()} ${request.getHeaderNames()} ${request.getHeader(String headerName)} ${request.getQueryString()} ${request.getParameter()} ${request.getParameterMap()} ${request.getParameterNames(String parName)} ${request.getServerName()} ${request.getServerPort()} ${request.getProtocol()} ${request.getScheme()} "},"docs/updateInfo.html":{"url":"docs/updateInfo.html","title":"更新日志","keywords":"","body":"更新日志 更早版本 (v1.4.2) ...... V1.5.0版本 (2016年05月25日) 修改文件列表，去除以 .开头的文件或者目录 增加新功能，每个分组的折叠或者打开将被记录到本地存储中。 V1.5.2版本 (2016年05月25日) 修改命令 ftl-node -V ftl-node -h V1.6.0版本 (2016年05月26日) 增加 ⌘+s 快捷保存,愉快的使用Mac快捷键 修改 根路径 为必填, 路径可以一个都不写，默认路径为 跟路径下地所有文件 修复在删除一个项目下最后一条路径和虚拟路径不能删掉得bug V1.6.2版本 (2016年05月30日) 修复在初次创建分组时候的bug V1.6.3版本 (2016年06月02日) 默认启动分组放到最后的优化 增加jshint检测 V1.6.5版本 (2016年06月14日) 修复 import, include, mock指令支持 / 开头, /指相对于配置中项目的根路径 V1.7.0 (2016年06月15日) 增加新功能 远程 ftl和远程 ajax假数据的功能 V1.7.1 (2016年06月15日) 弥补缺失的包 V1.7.2(2016年06月15日) 修复远程假数据为绝对路径时候的bug V1.7.3(2016年06月23日) 对远程假数据url参数做处理 V1.7.4(2016年06月23日) 文档更新 修复在 run.config.js 不配置 mockFtl属性,而传递的是个完整的url时能够请求假数据 V1.7.5(2016年06月23日) run.config.js 中得routes中的redirect在为函数的时候支持返回promise V1.7.6(2016年09月07日) 修改日志模块，增加命令，日志可控制 修改error事件，让一切error看起来更清晰 修改pkg引入方式 修复编码错误 V2.0.0(2016年09月22日) 增加catproxy拦截 代码解构优化 代码风格优化 前端界面增加是否代理服务，日志级别功能 V2.0.1 (2016年09月22日) catproxy版本号码修改 V2.1.0 (2016年10月20日) 修复ajax假数据代理url地址错误问题 增加新命令 ftl-node --autoOpen false 表示 不自动打开管理界面 增加freemarker自动转义功能，在 run.config.js 中配置 ftlFormat=true生效, 注意： 只有在freemarker jar包版本高于2.3.24该参数生效，否则无效 V2.1.1 (2016年10月20日) run.config.js中jarVersion支持配置相对路径 V2.2.0 (2016年10月20日) ftl-node -s 1|2 增加-s的配置, 1表示采用sni，2表示 采用 多组服务器，具体请 -h查看帮助 ftl-node -e --excludeHttps 增加当代理服务器的时候排除破解https列表的配置 ftl-node -b --breakHttps 增加当服务器是代理的时候是否破解https的开关，也可使用多个域名用逗号隔开 修改一些文字提示 更新 catproxy版本 V2.2.1 (2016年11月21日) 修复日志不显示的bug，修复语法bug 修改在设置成代理模式的时候找不到自己得bug V2.2.2 (2016年11月25日) 去掉ftl编译页面输出错误提示 V2.2.3 (2016年11月25日) 更新jar包 V2.2.4 (2016年11月25日) 更新jar包, 请不要使用 2.2.3，2.2.3jar包更新出错 V2.2.5 (2017年04月11日) autoOpen的修改 日志级别默认info keymaster修改，在input上点击 ctrl + s, cmd + s也可以保存 无网络状态使用 V2.2.6 (2017年04月17日) 修复启动路径错误问题 修改fs-extra版本 V2.2.7 (2017年04月18日) 修改静态文件，不要缓存 代码解构优化 V2.2.8 (2017年04月18日) 去掉错误的require 修改fs-extra为动态引用 强制node版本必须是4.0.0以上 V2.2.9 (2017年04月18日) 修改强制node版本代码 win下版本的修改 命令不用sudo启动 V2.2.10 (2017年04月18日) 修改发布错误的版本2.2.9 V2.2.11 (2017年04月18日) 将子进程的流pipe到主进程中 V2.2.12 (2017年04月20日) 修复 win上拦截的错误 修复 win上的文字错误 "}}