mock模板

vue create mock-demo // cmd vue脚手架命令 创建一个 有bale和route的项目

npm install axios --save // 使用 axios 发送请求
npm install mockjs --save-dev // 使用 mockjs 产生随机数据
npm install json5 --save-dev // 使用 json5 解决 json 文件, 无法添加注释问题

测试用的项目和依赖就准备好了

// 根目录创建mock文件夹 中index.js

const fs = require(‘fs’)
const path = require(‘path’)
const Mock = require(‘mockjs’) // mockjs 导入依赖模块
const JSON5 = require(‘json5’)
// 读取json文件
function getJsonFile (filePath) {
// 读取指定 json 文件
var json = fs.readFileSync(path.resolve(__dirname, filePath), ‘utf-8’)
// 解析并返回
return JSON5.parse(json)
}
// 返回一个函数
module.exports = function (app) {
if (process.env.MOCK === ‘true’) {
// 监听http请求
app.get(’/user/userinfo’, function (rep, res) {
// 每次响应请求时读取mock data的json文件
// getJsonFile方法定义了如何读取json文件并解析成数据对象
var json = getJsonFile(’./userInfo.json5’)
// 将json传入 Mock.mock 方法中, 生成的数据返回给浏览器
res.json(Mock.mock(json))
})
}
}

// 在 ./userInfo.json5
{
id: “@id”, // 得到的随机的id,对象
username: “@cname()”, // 随机生成中文名字
data: “@date()”, // 随机生成日期
avatar: “@image(‘10x10’,‘red’, ‘#fff’, ‘avatar’ )”,
// 生成图片, 长宽 背景颜色 字体颜色 图片显示的文章
description: “@paragraph()”, // 描述 随机无意义字符串
ip: “@ip()”, // IP地址
email: “@email()”, // email
}

mounted () {

// axios({
// url: ‘/user/userinfo’
// }).then(res => console.log(res))

axios
  .get('/user/userinfo')
  .then(res => {
    console.log(res)
  })
  .catch(err => {
    console.log(err)
  })

}

//return JSON.parse(’{"’ + decodeURIComponent(search)
// 解析地址栏
// .replace(/"/g, ‘\"’) // 替换匹配正则 后面是新值 前面是被替换的值
// .replace(/&/g, ‘","’)
// .replace(/=/g, ‘":"’) + ‘"}’)

插件 json5 json5sync

// 在 vue.config.js 中
module.exports = {
devServer: {
// 在devServe中做的任何访问都会被 before 这个中间键拦截到。然后在before里面做你的操作,然后才//会执行后面的操作
before: require(’./mock/index.js’)
}
}

移除 Mock
在cli中 环境变量模式 选择.env.[mode]变量来
dev 开发模式 vue-cli-service serve
pro 发布模式 vue-cli-service build
test 单元测试模式 vue-cli-service test:unit

在项目根目录 创建 .env.development
判断变量 MOCK
MOCK = true 开启
MOCK = false时关闭

创建多个数组 把变量循环push到数组

第三种 在mock.js中
import Mock from “mockjs”;
Mock.setup({
timeout: “10-2500”
});
// Mock.mock(//user/, {});
Mock.mock(//user/, “get”, (data) => {
// 此处可写 js 判断代码
// 如果 为post 请求 data 为请求体 可根据data内容返回数据
return {
status: 200,
total: 21,
per_page: 4,
current_page: 1,
last_page: 6
};
});

// 在main.js中
import “@/util/mock.js”;
全局即可拦截路径为 /user 的 get请求 并return返回数据

// 第四种
axios(‘http://localhost:8999/static/map/china.json’)
…axios能直接读取本地json文件 我才知道 …

第二种 使用方法

  1. src/mock/until.js 中 // 定义 验证 过滤 返回参数

const responseBody = {
message: ‘’,
timestamp: 0,
result: null,
code: 0
}
// 定义builder 箭头函数 的参数为4个
export const builder = (data, message, code = 0, headers = {}) => {
responseBody.result = data // responseBody 对象添加result:data
if (message !== undefined && message !== null) {
responseBody.message = message // 如果不为空 获取传入的参数 给responseBody对象
}
if (code !== undefined && code !== 0) {
responseBody.code = code // 如果不为空 获取传入的参数 给responseBody对象
responseBody._status = code // 如果不为空 获取传入的参数 给responseBody对象
}
if (headers !== null && typeof headers === ‘object’ && Object.keys(headers).length > 0) {
responseBody._headers = headers // 如果不为空 获取传入的参数 给responseBody对象
}
responseBody.timestamp = new Date().getTime()
// 给responseBody对象新加属性 timestamp:毫秒时间戳
return responseBody // 新的responseBody 返回给 builder
}

export const getQueryParameters = (options) => { //获取查询参数函数
const url = options.url // 获取传进来的参数
const search = url.split(’?’)[1] // 分割传进来的参数
if (!search) {
return {} // 如果为空 返回空
}
return JSON.parse(’{"’ + decodeURIComponent(search)
// 解析地址栏
.replace(/"/g, ‘\"’) // 替换匹配正则 后面是新值 前面是被替换的值
.replace(/&/g, ‘","’)
.replace(/=/g, ‘":"’) + ‘"}’)
}

export const getBody = (options) => { // 导出获取getBody 函数
return options.body && JSON.parse(options.body)
// 传入参数的.不为空 就转换为json
}

  1. src/mock/services/auth.js 中 // 拦截 验证 返回 数据
    import Mock from ‘mockjs2’ // 引入mock为js2
    import { builder } from ‘…/util’ // 导入函数 请求参数 请求体
    const login = (options) => {
    return builder({ // 返回参数 对象builder
    ‘id’: Mock.mock(’@guid’),
    ‘name’: Mock.mock(’@name’),
    ‘username’: ‘admin’,
    ‘password’: ‘’,
    ‘avatar’: ‘https://gw.alipayobjects.com/zos/rmsportal/jZUIxmJycoymBprLOUbT.png’,
    ‘status’: 1,
    ‘telephone’: ‘’,
    ‘lastLoginIp’: ‘27.154.74.117’,
    ‘lastLoginTime’: 1534837621348,
    ‘creatorId’: ‘admin’,
    ‘createTime’: 1497160610259,
    ‘deleted’: 0,
    ‘roleId’: ‘admin’,
    ‘lang’: ‘zh-CN’,
    ‘token’: ‘4291d7da9005377ec9aec4a71ea837f’
    }, ‘’, 200, { ‘Custom-Header’: Mock.mock(’@guid’) })
    }
    Mock.mock(//auth/login/, ‘post’, login) // 正则 /auth/login post 调用login函数

  2. 这才是真正拦截 使用VueAxios 请求的都会被拦截
    在src/untils/axios.js 中
    const VueAxios = {
    vm: {},
    // eslint-disable-next-line no-unused-vars
    install (Vue, instance) {
    if (this.installed) {
    return
    }
    this.installed = true

    if (!instance) {
    // eslint-disable-next-line no-console
    console.error(‘You have to install axios’)
    return
    }

    Vue.axios = instance

    Object.defineProperties(Vue.prototype, {
    axios: {
    get: function get () {
    return instance
    }
    },
    $http: {
    get: function get () {
    return instance
    }
    }
    })
    }
    }

export {
VueAxios
}
4. 在src/utils/request.js 中 引入axios请求 和 vuex
import axios from ‘axios’
// 创建 axios 实例
const request = axios.create({
// API 请求的默认前缀
baseURL: process.env.VUE_APP_API_BASE_URL,
timeout: 6000 // 请求超时时间
})
export default request // 导出封装好的拦截器

  1. 在src/api/login.js 中 封装请求函数并导出
    import request from ‘@/utils/request’// 加了个头 弹窗提示 限制导出内容
    export function login (parameter) { // 导出函数 login
    return request({
    // url: userApi.Login,// Login: ‘/auth/login’,
    method: ‘post’,
    data: parameter
    })
    }

  2. mock的index
    const Mock = require(‘mockjs2’) // 同步此处会一步步执行 mockjs 导入依赖模块
    require(’./services/auth’) // 读取文件
    require(’./services/user’)
    require(’./services/manage’)
    require(’./services/other’)
    require(’./services/tagCloud’)
    require(’./services/article’)
    Mock.setup({
    timeout: 800 // setter delay time
    })

3中会拦截
Mock.mock(//auth/login/, ‘post’, login) // 正则 /auth/login post 调用login函数
3 拦截之后会自动返回数据

<think>嗯,用户想了解API Mock的相关概念或实现方法,以及工具推荐。首先,我需要先理清楚API Mock的基本定义和用途。API Mock应该是指模拟API接口的行为,方便开发者在实际API尚未完成时进行测试和开发。根据引用里的信息,比如引用3提到apimock可以动态模拟API服务器的返回数据,支持多种格式,这可能是一个关键点。 接下来,用户可能想知道如何实现API Mock。可能需要分步骤说明,比如使用框架或工具搭建Mock服务器,定义路由和响应数据。引用2中的mock-api项目是一个Android的框架,可以提到。还有引用4中的Yapi,不仅支持Mock,还有接口管理和权限控制,这也是一个不错的工具。 然后工具推荐部分,需要列举几个常见的,比如Apimockmock-api、Yapi、Postman、Mockoon等。每个工具的特点和适用场景需要简要说明。比如Apimock在引用1和3中被提到,强调高效和动态模拟,适合独立开发者和团队。Yapi则更适合需要接口管理和协作的场景。 用户可能还会关心应用场景,比如前后端分离开发、测试用例设计、第三方API依赖等。这时候需要结合引用中的内容,比如引用3提到的适用场景,可能包括单元测试、集成测试等。 另外,要注意用户可能对实现原理感兴趣,比如如何拦截请求返回模拟数据,是否需要编写代码或配置文件。引用2中的mock-api是基于JSON配置的,可能是一个例子。而Apimock则可能提供更灵活的配置方式,如引用3提到的动态实时mock命令配置,键值支持正则模糊检索。 需要检查是否有遗漏的信息,比如引用4提到的Yapi的分组和权限管理,这也是工具的一个优势,可以强调其在团队协作中的作用。同时,确保推荐的工具都有对应的引用标记,比如[^1]、[^3]等。 最后,要确保回答结构清晰,分点说明概念、实现方法和工具推荐,并附上相关问题。可能用户后续还会问到如何选择适合的工具,或者具体某个工具的使用教程,所以在相关问题里可以预设这些。</think>### API Mock 概念与实现方法 #### 一、API Mock 的核心概念 API Mock 是通过模拟真实 API 的行为和响应数据,帮助开发者在依赖的接口未完成或不可用时,快速推进开发或测试的技术。其核心目标是实现**请求拦截与动态响应**,例如模拟 HTTP 状态码、JSON/XML 数据、延迟响应等。 #### 二、实现 API Mock 的步骤 1. **选择工具或框架** 使用现成工具(如 ApimockMockoon)或代码框架(如 Python 的 `Flask`、Node.js 的 `json-server`)搭建 Mock 服务器。 **示例代码(基于 `json-server`):** ```bash npm install -g json-server echo '{ "users": [{ "id": 1, "name": "Mock User" }] }' > db.json json-server --watch db.json ``` 此时可通过 `GET http://localhost:3000/users` 获取模拟数据。 2. **定义路由与响应规则** - **静态响应**:固定返回预设数据(如 Yapi 的 Mock 功能支持静态模板[^4])。 - **动态响应**:根据请求参数、头部或路径动态生成数据(如 Apimock 支持正则匹配和模糊检索)。 3. **集成到开发流程** 将 Mock 服务器地址配置到项目中,替代真实 API 地址,实现前后端并行开发。 #### 三、推荐 API Mock 工具 | 工具名称 | 特点 | 适用场景 | |--------------|----------------------------------------------------------------------|------------------------------| | **Apimock** | 动态模拟、多格式支持、模糊检索 | 高效 API 测试与开发 | | **Yapi** | 接口管理、权限控制、Mock 模板 | 团队协作与复杂项目管理 | | **Mockoon** | 本地化部署、无代码配置 | 轻量级前端开发 | | **Postman** | 集成 Mock 服务、支持预请求脚本 | 调试与文档编写 | | **mock-api** | Android 专用框架、基于 JSON 配置[^2] | 移动端接口测试 | #### 四、典型应用场景 1. **前后端分离开发**:前端无需等待后端接口完成即可联调。 2. **第三方 API 依赖**:模拟支付、地图等外部接口的异常状态(如超时、401 错误)。 3. **自动化测试**:为单元测试/集成测试提供可控的输入数据。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qwer22215

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值