日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

前端 Mock 工具

發布時間:2023/12/9 HTML 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 前端 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

特性:

  • 復寫 fetch 和 XMLHttpRequest 實現攔截,所以在 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);}); });

根據 url 參數動態配置超時:

// fetch("/movies?t=2000") this.get("/movies", (_, req) => {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 },],});}, req.queryParams.t || 0);}); });

請求直通

官方的文檔不生效,看了下代碼實現有問題,如下:

// 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 外的請求,都不做處理,把以下代碼入到 routes 中執行:

this.passthrough((req) => {return req.url.indexOf(this.namespace) === -1; });

總結

以上是生活随笔為你收集整理的前端 Mock 工具的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。