这篇技术博客是在知乎上看到的 知乎js大神张云龙写的 这里贴过来记录下,若是侵权 请告知将及时删除。php
---------------------------前端
为了更好的分工合做,让前端能在不依赖后端环境的状况下进行开发,其中一种手段就是为前端开发者提供一个web容器,这个本地环境就是 mock server。
要完整运行前端代码,一般并不须要完整的后端环境,咱们只要在mock server中实现如下几点就好了:java
能渲染模板很简单,在mock server中集成模板引擎就好了,而后提供模拟的页面数据用于完整渲染页面,不过有时候生产环境中的模板引擎可能有一些环境依赖的扩展,这个要单独实现。
请求路由映射,实现原理就是要让本地的mock server有一个router,能接收全部HTTP请求,而后在router中根据线上的路由约定,实现一套同样的规则,这个也不难,不赘述了。
最后数据接口代理。与前端相关的HTTP请求一共就3种响应状况:python
因为实现了router,咱们把渲染页面的请求在mock server中处理掉,直接输出本地模板的渲染结果;静态资源的请求直接返回文件内容;而把数据请求代理到测试或者生产环境,本地就不用mock了(固然,若是出现新的接口测试环境没有的,能够追加router,在mock server想响应假数据)
至于题主说的url一致性问题,其实不存在的。你的这个 http://www.foo.com/bar 的数据请求,在js中应该这样写:
web
$.get('/bar', callback)
这种写法,省略了host,在线下开发时,其最终结果是请求 http://127.0.0.1:3000/bar,而因为咱们在mock server中实现了路由规则,这个请求实际上被代理到了测试/生产环境去获取数据。而当你把代码部署到线上时,其访问真实请求地址又自动变成了你指望的 http://www.foo.bar,正常运行。json
补充一些Tips:后端
不少前端工程师觉得前端分离的惟一途径是接入NodeJS做为UI层,其实不是的,还有一种方案就是这种Mock Server,前端工程师直接写后端模板,效果有时候甚至更好,并且对已有先后端架构的改动成本最小。
====== 更新 ======
经常使用脚本语言下开启简易web server的方法,能够用于实现Mock Server:ruby
ruby -run -e httpd . -p 9090前端工程师
python -m SimpleHTTPServer 8000架构
php -S 127.0.0.1:8088 router.php