当前位置: 首页 > 后端技术 > Node.js

Mock请求分发

时间:2023-04-03 20:45:37 Node.js

首发于语雀文档背景是这样的。我们公司的后台管理项目没有使用resful风格的API,而是后台管理网关。后台管理网关会分发请求。具体怎么分配呢?以下几点如下:所有请求通过POST请求URL统一为/agrs数据提交方式为application/json数据格式大致分为:系统头服务名接口名接口版本号系统标识本地头用户信息分页信息device消息消息体根据具体情况变化的动态数据文件传输,使用OSS代替form文件流...痛点当然,我们前端不可能开发完就开始写代码了后端已经完成,所以我们需要mocks,但是由于上述需求,网关请求分发对于mock开发来说非常不方便。有以下几种:传统方式创建mock,那么开发的时候requestURL是一套的,打包的时候都要全部改成/agrs。..我希望的是在开发和打包的时候是一样的,不需要改变两套标准。当需要一个新的mock时,根据umi的mock规范,需要在mock文件夹下创建一个js文件,默认暴露一个对象,例如:mock/getApps.jsexportdefault{"POST/getApps":{sysHead:{},localHead:{},body:{},}}需要写重复的代码和重复的数据结构(sysHead,localHead),而我只想关注正文中的模拟数据。我们的是umi项目。有关模拟的详细信息,请参阅模拟数据。根据第2点,当实际提供后端接口的服务名&接口名时,为了保持一致性,我们需要修改mock文件的名称,同时也需要修改mock中暴露的对象中的URL名称文件,这很麻烦。要实现第三点,必须要有一个前提,就是mock文件的名字和mock拦截的url一致,不然那么多接口很难看,找起来会很蛋疼.以js暴露模块的方式进行mocking。拦截相同URL的mock可以在不知情的情况下被覆盖。不知道的人会出现mock的URL是正确的,但响应数据不匹配。这种混乱的情况……上面的不方便不是想象出来的,因为花了时间和人力才得出确实不方便的结论。仅以上第一点就足够了。整体方案是:只拦截url/agrs,使用node.js获取request消息request中的参数服务名和接口名,按照设计好的目录结构拼接路径,根据路径和格式读取文件它在JSON中,最后返回。解决以上痛点:开发打包时保持一致,使用统一的URL:/agrs。不使用js暴露模块,直接使用json文件,将mock数据以json格式放置是重点,其他重复的数据结构会在其他地方整合。设计的目录规范是:目录的名字就是服务的名字,mock文件的名字就是接口的名字。(在第2点中已经提到不需要再定义和暴露,所以如果修改没有以前那么麻烦,只需要修改目录名和文件名即可)在任何系统、文件夹或文件中同名不能出现在同一个目录是的,按照第3点的目录规范,可以解决重复覆盖的问题,也可以重复别人已有的接口。话不多说,直接上github,不是每个人都会遇到这种情况,只是一个帮助前端团队内部提升开发体验的小工具库,也是一个前端组长应该做的做。代码并不复杂,自我感觉更重要的是,不管问题大小,自己都会想怎么解决更好,不断总结,不断积累。Githubhttps://github.com/blueju/mock-request-distribute