You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
// build/dev-server.jsconst{ neiOnline, useProxy, proxyTable }=require(path.resolve(__dirname,'./../mock/proxy.config.js'))varexpress=require('express')varapp=express()if(neiOnline){console.log('use nei mock data online')app.use(require('./../mock/nei-online.js'))}elseif(useProxy&&proxyTable.length>=0){console.log('use proxy')app.use(proxyTable)}else{console.log('user local mock')app.use(require('./../mock'))}
2018年06月29日
NEI常用功能介绍
NEI(Netease Easy Interface) 是一个为我们提供接口约定、维护的接口管理平台,它同时提供了自动化构建工具。
简单介绍下NEI常用的几个功能:
nei build -k xyz
nei build
构建的项目:nei update
nei server
社区后台原有数据mock方案
从上面代码可以看出,该方案使用本地mock文件存放接口的返回数据。其缺点非常明显:
原有数据mock方案与NEI有机结合
NEI作为一个定义、维护接口的平台,使用方便、非常便于接口管理。另外,QA使用的接口测试平台gotest与NEI对接,这就要求开发必须在NEI上维护接口约定。
那么如何把NEI与原有mock方案有机地结合起来呢?
社区后台的解决方案是:使用原有中间件,利用NEI提供的mock数据和自动化构建方案替换原来的手动mock(包括手动创建mock文件和数据、手动维护接口和mock文件的对应关系)方式,并增加使用线上NEI提供的mock数据功能 和 代理到线上/测试环境的功能。
1. 使用nei提供的在线mock数据
nei本身提供了使用nei在线mock数据的方法:
nei server
可以启动本地模拟容器,设置 server.config.js 文件的online: true
就可以使用nei提供的在线mock数据了。那么不使用
nei server
,该怎么实时拿到nei线上mock数据呢?剖析nei-toolkit源码,发现nei上定义的每个接口都可以通过https://nei.netease.com/api/mockdata?path=${requestPath}&type=3&key=${项目key}&method=${method}
请求来返回结果数据。(其中requestPath是接口url,type为3表示api接口、1表示页面接口,key是项目唯一标识码,method是请求方法如get或post)所以我们方案是:
nei-online.js代码略。
2. 本地mock
原有的本地mock方案,是根据请求和mock文件的对应关系去取/mock/data下的相应mock文件,那么我们可以根据nei提供的mock文件替换掉/mock/data下的文件,根据server.config.js自动生成接口和mock文件对应关系routeMap,从而将原有本地mock中间件与NEI有机结合起来。
注意:nei拉取到本地的文件结构是在nei工程规范中定义的。
mockRouterMap.js文件修改(只贴出修改的代码):
3. 代理到线上/测试环境
通过http-proxy-middleware把请求代理转发到其他服务器,从而响应得到其他服务器上该请求的返回数据。
关键代码:
线上/测试环境代理到本地debug
当我们需要定位线上或测试环境的问题时,通常的做法是拦截资源请求、使其走本地资源(如使用Fiddler),这样就可以在本地定位问题了。社区组娄涛同学写了个proxy-local(github),可以在不使用代理工具的情况下让线上/测试环境请求本地资源。
下一步
总结
我们拿到一个需求之后,为了达到前后端分离的高效开发方式,开发各阶段都需要不同的数据mock方式。
参考
by Fridas
The text was updated successfully, but these errors were encountered: