-->GitHub地址在旧石器时代,Web开发并没有刻意区分前后端。写后端的人认为写数据库和写模板都是必修技能。现在一般需要分前后端,因为大量前端框架和工具链的涌入(根本原因是需求复杂),让前端可以独立于后端。但是不管是前端写模板,还是前后端完全分离的写JSX,都离不开与后端的数据交互。以上是这个工具的动机。我们暂且把前后端交互的数据分为模板数据(后端直接填充)和异步数据(通过HTTP接口)。工具的作用是平滑过渡数据交互,降低沟通成本。.名字的由来是在开发初期,后端可能还没有开始或者写完。此时前端只能使用本地数据模拟实际数据进行布局和组件调试,一般称为mock数据。当前端写的差不多的时候,后端可能就差不多准备好了,那么这个时候就需要联调了,因为联调的过程很可能伴随着大量的修复工作,部署的成本前端和后端加起来太高端了。高效的方式是通过代理直接从模拟数据切换到后端数据,这里称为代理。如果你把mock和proxy结合起来,那就叫moky!用户手册项目的GitHub已经简单说明了如何使用,但我觉得有必要再补充一些说明。首先需要强调的是,moky只专注于mock和proxy,所以代码只能在200行左右。市场上已经有很多人做过这个工作,但基本上没有一个能满足我的需求。使用上和webpack很像,全局安装npmimoky-g,只需要一个配置文件,然后直接在配置文件moky.config.js所在目录下运行moky,或者指定配置文件路径moky-c/path/通过参数/xxx.js但是需要先配置moky.config.js才能正确使用。下面是对配置文件的罗嗦介绍://这里之所以需要path是因为后面的文件路径必须是绝对路径varpath=require('path');module.exports={//本地监听端口,runningmoky会启动一个服务器localPort:3000,//异步数据的模拟目录路径asyncMockPath:path.join(__dirname,'mock'),//同步数据的模拟目录路径viewsMockPath:path.join(__dirname,'tplMock'),//模板所在的目录,如果你是前后端完全分离的,没有模板,那么至少要有一个index.html//就用这个index.html所在的目录位于模板目录中。viewsPath:path.join(__dirname,'views'),//这个没用,如果有favicon,设置一下。faviconPath:path.join(__dirname,'public','favicon.ico'),//这里不要被js和css误导,这里是设置静态资源的路由//注意它的优先级比较高,所以不要错过它/更多/和其他冲突publicPaths:{'/css':path.join(__dirname,'public','css'),'/js':path.join(__dirname,'public','js'),},//template引擎设置,详见koa-views。Moky内置了几个模板引擎,可以直接使用。//注意两点:如果选择freemarker,一定要保证JAVA_HOME等设置正确;//如果是纯的HTML页面,可以选择任意模板引擎,推荐nunjucksviewConfig:{extension:'html',map:{html:'nunjucks'},},//这里解决了很多web容器采用的VirtualHost机制(一个IP:PORT通过域名对应多个服务)//由于我们本地启动可能是http://localhost:3000,如果有VirtualHost机制,则不会通过//如果设置了hostName,程序会自动sendtherequestReplacetheHostheaderwithhostNamehostName:'hacker-news.firebaseio.com',//这里是proxy映射表,如果启动时是moky-edev,异步请求会自动去对应的proxytodev//如果没有找到相应的,默认使用本地mock数据作为异步数据proxyMaps:{dev:'https://hacker-news.firebaseio.com',local:'http://localhost:8080',},//这是页面路由设置,这里的key是路由(在url中看到的),value是页面的相对路径//路径是相对于viewsPath的,不需要后缀,viewConfig.extensionspecifiedurlMaps:{'/':'index','/page':'page/index',},}最简单的尝试方法是全局安装moky,然后clone项目,进入example目录,直接运行moky可以看到目录结构:├──mock│├──get│├──test│││└──index.json││└──v0││└──item││└──2921983.json.json│└──post│└──index.json├──moky.config.js├──public│├──css││└──main.css│├──favicon.ico│└──js│└──main.js├──tplMock│├──index.json│└──page│└──index.json└──views├──index.html└──page└──index.html如果直接运行moky,默认会使用mock模式。数据流是这样的:当我们在浏览器中打开http://localhost:3000/page时,路由会根据我们的设置匹配一次:静态资源->页面->异步接口,这里的页面是匹配到,程序停止,程序会去tplMock/page/index.json获取模板数据,然后填充渲染返回到页面中静态资源的会议,此时首先路由自public然后会有一个异步接口GETv0/item/2921983.json,最终会被异步处理模块处理,因为我们启动的是mock模式,所以我们会去mock/get文件夹中找到对应的json作为本地mock数据,如果我们用moky-edev启动它,那么GETv0/item/2921983.json将从proxyMaps.dev中反转过来。遗留问题模板数据无法通过代理从远端获取。对第三方登录/认证不友好
