码农知识堂 - 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的数据重新转为想要的格式,按照上述方式转化,下载文件恢复正常

  • 相关阅读:
    删除不必要的内核模块
    【Ne4j图数据库入门笔记1】图形数据建模初识
    计算机网络(Learning Records)
    微信h5支付配置,商家存在未配置的参数,请联系商家解决
    【rabbitmq的消息堆积问题】
    算法----组合总和(Kotlin)-面试真题
    [附源码]SSM计算机毕业设计校园爱心支愿管理系统JAVA
    SpringBoot-热部署
    MySQL数据库管理及用户管理以及数据库用户授权
    Redis源码之SDS简单动态字符串
  • 原文地址:https://blog.csdn.net/tjj3027/article/details/129422656
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号