Mock
Mock copied to clipboard
MockXMLHttpRequest在处理二进制流类型的response时的结果与源生方法不一致
如题,在前后端联调下载文件时遇到了这样一个问题:服务器端返回的文件为二进制流,源生请求会正常的将其作为blob对象返回,而mock则会将其转为字符串。
源生请求返回的data中为blob
mock重写的请求返回的data中为字符串
另外,目前了解到mock完全重写了源生的XMLHttpRequest,所以在开发过程中包括未拦截的源生请求都会默认的被mock替代,请问是否可以选择一些请求使用源生方法? 谢谢!
遇到了相同问题,请问怎么解决啊
如题,在前后端联调下载文件时遇到了这样一个问题:服务器端返回的文件为二进制流,源生请求会正常的将其作为blob对象返回,而mock则会将其转为字符串。 源生请求返回的data中为blob
mock重写的请求返回的data中为字符串
另外,目前了解到mock完全重写了源生的XMLHttpRequest,所以在开发过程中包括未拦截的源生请求都会默认的被mock替代,请问是否可以选择一些请求使用源生方法? 谢谢!
大佬,你是怎么解决的啊,mockRequest对象返回的是字符串,我加载音频的时候需要的是二进制流啊
@stovd 搜了3个小时找到这里,最后找到一个ugly的解决思路,亲测可用
https://github.com/Hugo-X/Mock/commit/2a6cc9ce7cfa407ce0036c187a6de1803f567884
这个改动应该也可以解决问题
克隆最新的mockjs好像依旧,会将二进制类型强转成字符串类型
太坑了吧,哪有直接覆盖重写原生的啊,我被这个问题整福气了
谢谢楼上
TM的,找一下午不知道为什么我的音频文件请求过来后不能播放,结果发现明明设置axios的responseType=arraybuffer,但是接到的内容不是arraybuffer,坑死个人啊
哈哈哈哈,试试使用 https://github.com/wll8/mockm 救你于苦海。
这是来自QQ邮箱的假期自动回复邮件。
我这导出excel,我人都麻了,找半天找不到问题
这是来自QQ邮箱的假期自动回复邮件。
有谁能联系到作者,可不可以把这个问题先修复了,又不麻烦,又拖了这么久。。。。。。
作者几年没有更新代码了,所以这不是麻烦不麻烦的问题,这是这个库已经不维护了的现象。
这个仓库已经不维护了,我fork了一份已经解决,可以使用我fork的仓库 tony-mockjs
npm i tony-mockjs
我的代码里里面使用了threejs,具体的responseType值会是 text|ArrayBuffer|json,目前工作良好
function blobRequest () {
if (window['_XMLHttpRequest']) {
window['_mockXMLHttpRequest'] = window['XMLHttpRequest']
window['XMLHttpRequest'] = window['_XMLHttpRequest']
}
return new Promise(async (resolve) => {
const res = await axios.call(null, ...arguments)
if (window['_mockXMLHttpRequest']) {
window['_XMLHttpRequest'] = window['XMLHttpRequest']
window['XMLHttpRequest'] = window['_mockXMLHttpRequest']
delete window['_mockXMLHttpRequest']
}
return resolve(res)
})
}
可以单独封装一个方法,二进制流的业务场景只调用这个方法。
当然,以上代码中,axios
可以是任意一个 http
库。