码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • [mockjs]Mock使用过程中的坑


    [mockjs]Mock使用过程中的坑

    • 现象描述
    • 原因分析
    • 解决方案
      • 修改源码
      • 处理无法识别的文件流

    现象描述

    mockjs在使用的过程中出现了下载文件无法正常打开的问题,但是在线上环境是正常的

    console.log打印返回的response,发现是本地无法正常解析response.data

    在代码中,该请求设置了responseType:blob,所以正常情况下接收的response.data应该是blob类型

    data: Blob{size: 4608,type: "application/vnd.ms-excel"}
    
    • 1

    在使用了 mockjs 的情况下,接收到的response.data不是文件流,而是string类型

    data: '��\x11ࡱ\x1A�\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00;\x00\x03\x00��\t\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00…\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',
    
    • 1

    原因分析

    两者的区别是线上环境是没有使用mockjs的

    mockjs源码中responseType的值被覆盖了,导致mockjs开启的情况下,调用真实接口responseType无法使用设置的值

    解决方案

    修改源码

     this.custom.xhr.responseType = this.responseType //复制原始XHR的responseType
     this.custom.xhr.send(data)//源代码
    
    • 1
    • 2

    该方式是直接对mockjs中/src/mock/xhr/xhr.js文件进行修改,但是该方式只有原作者修改并上传才不会影响下次的使用,否则更改的是本地的,对于每次初始化时重新下载了mockjs无法从根本上解决

    处理无法识别的文件流

    mockjs源码导致了文件流被responseType:'json’解析了,因此无法正确识别,因此,我们只需在将转换为json的response.data重新转换为需要的类型。
    例如 arrayBuffer,可以对接收到的res.data:

    new Uint8Array(res.data)
    
    • 1

    例如 blob ,可以对接收到的res.data:

    const blob=new Blob([JSON.stringify(res.data)], { type: "application/json" })
    
    • 1

    mockjs 引用导致responseType:"blob"被重写为json了,因此需要把转成json的数据重新转为想要的格式,按照上述方式转化,下载文件恢复正常

  • 相关阅读:
    typeScript 学习笔记(二)
    OpenSSL 针对2个新的高严重性漏洞发布补丁
    文件服务器 — File Browser
    LLM 面试总结
    Vite+Vue3项目使用第三方Animate.css动画库简单实现页面级的路由转场动画详细教程
    Python---upper()--转大写///与lower() --转小写
    毫米波雷达人体感应器,智能感知静止存在,人体存在检测应用
    云原生之nacos架构一览解读
    【Shell脚本入门】
    【自动化测试】基于Selenium + Python的web自动化框架!
  • 原文地址:https://blog.csdn.net/tjj3027/article/details/129422656
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号