Mock
Mock copied to clipboard
引入mock后,axios响应头的responseType失效,导致乱码了
引入mock后,axios响应头的responseType:blob‘’失效,导致乱码了。。。。这个是否解决呢
可以解决的,有两个方式,在拦截处判断响应头再进行 return。或者使用 https://github.com/wll8/mockm
如果未匹配到数据模板,Mockjs会初始化原生XHR对象,这个过程导致设置axios里设置的responseType没有起作用。
所以,如果在使用类似axios({ responseType: "arraybuffer" })
的时候,这个设置并没有起作用的原因。
- 在axios的xhr开始open时(axios::xhr.js),mockjs对其xhr对象进行了初始化,并将原生xhr的设置复制给了mockjs xhr对象,这个过程没有设计到responseType的设置(mockjs::mock.js)
- axios的xhr对象在执行send之前,对responseType进行了设置(这个过程没有对mockjs的xhr对象设置同样的responseType)
- 在执行send时,mockjs开始判断,如果没有匹配到数据模板,则启用原生的xhr对象执行,这个时候mockjs将它的xhr设置复制给原生的xhr对象。
这个过程中第2步的执行是没有将responseType值继承的。
https://github.com/nuysoft/Mock/pull/426 这个issue应该也不能解决这个问题,可能axios的config.responseType能在open前复值给request对象就可以了。
如果未匹配到数据模板,Mockjs会初始化原生XHR对象,这个过程导致设置axios里设置的responseType没有起作用。 所以,如果在使用类似
axios({ responseType: "arraybuffer" })
的时候,这个设置并没有起作用的原因。
- 在axios的xhr开始open时(axios::xhr.js),mockjs对其xhr对象进行了初始化,并将原生xhr的设置复制给了mockjs xhr对象,这个过程没有设计到responseType的设置(mockjs::mock.js)
- axios的xhr对象在执行send之前,对responseType进行了设置(这个过程没有对mockjs的xhr对象设置同样的responseType)
- 在执行send时,mockjs开始判断,如果没有匹配到数据模板,则启用原生的xhr对象执行,这个时候mockjs将它的xhr设置复制给原生的xhr对象。
这个过程中第2步的执行是没有将responseType值继承的。
#426 这个issue应该也不能解决这个问题,可能axios的config.responseType能在open前复值给request对象就可以了。
能不能给个具体的解决方法?
可以不使用xhr,改为fetch获取文件blob。 (^o^)/~
这个仓库已经不维护了,我fork了一份已经解决,可以使用我fork的仓库 tony-mockjs
npm i tony-mockjs
我的代码里里面使用了threejs,具体的responseType值会是 text|ArrayBuffer|json,目前工作良好