IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 前端 Mock 工具 -> 正文阅读

[JavaScript知识库]前端 Mock 工具

名称地址安装
Mock.jshttps://github.com/nuysoft/Mocknpm install mockjs
mockmhttps://github.com/wll8/mockmnpm install mockm
JSON Serverhttps://github.com/typicode/json-servernpm install json-server
MSW(Mock Service Worker)https://github.com/mswjs/mswnpm install msw
Mirage JShttps://github.com/miragejs/miragejsnpm install miragejs

Mirage JS

特性:

  • 复写 fetchXMLHttpRequest 实现拦截,所以在 Dev Tools 中的 Network 是看不到请求的。
  • 默认全部拦截,直通函数 passthrough 匹配不太友好。

使用它主要是因为不用配置代理,也不用单独去启动一个新的端口来承载 Mock Server,相对使用简单,用来做测试还是挺方便的。体验上的不足就是 Network 面板看不到请求了,不过可以接受。

示例:

import { createServer } from "miragejs"

createServer({
  routes() {
    this.namespace = "api"

    this.get("/movies", () => {
      return {
        movies: [
          { id: 1, name: "Inception", year: 2010 },
          { id: 2, name: "Interstellar", year: 2014 },
          { id: 3, name: "Dunkirk", year: 2017 },
        ],
      }
    })
  },
})

超时配置

this.get(
  "/movies",
  () => {
    return {
      movies: [
        { id: 1, name: "Inception", year: 2010 },
        { id: 2, name: "Interstellar", year: 2014 },
        { id: 3, name: "Dunkirk", year: 2017 },
      ],
    }
  },
  { timing: 4000 }
)

OR

this.get("/movies", () => {
  return new Promise((res) => {
    setTimeout(() => {
      res({
        movies: [
          { id: 1, name: "Inception", year: 2010 },
          { id: 2, name: "Interstellar", year: 2014 },
          { id: 3, name: "Dunkirk", year: 2017 },
        ],
      });
    }, 4000);
  });
});

请求直通

官方的文档不生效,看了下代码实现有问题,如下:

// createPretender
this.checkPassthrough = function (request) {
  let shouldPassthrough = server.passthroughChecks.some(
    (passthroughCheck) => passthroughCheck(request)
  );

  if (shouldPassthrough) {
    let url = request.url.includes("?")
      ? request.url.substr(0, request.url.indexOf("?"))
      : request.url;

    this[request.method.toLowerCase()](url, this.passthrough);
  }

  return originalCheckPassthrough.apply(this, arguments);
};

// Server
passthrough(...paths) {
  // this only works in browser-like environments for now. in node users will have to configure
  // their own interceptor if they are using one.
  if (typeof window !== "undefined") {
    let verbs = ["get", "post", "put", "delete", "patch", "options", "head"];
    let lastArg = paths[paths.length - 1];

    if (paths.length === 0) {
      paths = ["/**", "/"];
    } else if (Array.isArray(lastArg)) {
      verbs = paths.pop();
    }

    paths.forEach((path) => {
      if (typeof path === "function") {
        this.passthroughChecks.push(path);
      } else {
        verbs.forEach((verb) => {
          let fullPath = this._getFullPath(path);
          this.pretender[verb](fullPath, this.pretender.passthrough);
        });
      }
    });
  }
}

可以采用这种方式,来把 namespace 外的请求,都不做处理:

this.passthrough((req) => {
  return req.url.indexOf(this.namespace) !== 0;
});
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-01-03 15:59:25  更:2022-01-03 16:00:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 13:04:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码