Mock 是一种用于模拟 API 请求和响应的工具,能够帮助前端开发人员在没有后端 API 的情况下进行开发和测试。npm 包 mock 是一个基于 Node.js 的 Mock 工具,使得我们可以快速、简单地创建 Mock 数据并支持自定义路由、响应头和状态码等功能。
安装
首先需要在项目中安装 npm 包 mock:
npm install mockjs --save-dev
使用
基本用法
mock 可以使用两种方式,在 js 文件中直接编写或者使用 json 配置文件。以下是一个简单的示例:
-- -------------------- ---- ------- ----- ---- - ----------------- -- -- --- -- ----------------------- ------ - ---------- -- -------- -- ------- --------- ------------ -- -------- -------- -- -- -- -- ---- -- ----------------------- ------- -------- --------- - ----- ---------- --------- - ------------------------ -- --------- --- ------- -- -------- --- --------- - ------ - ----- ---- -------- ------ - - ---- - ------ - ----- ---- -------- ---------- - - --
上述代码中,我们使用 Mock.mock 方法来创建 Mock 数据。第一个参数为 API 路径,第二个参数为请求方法(get、post 等),第三个参数为响应数据。
其中,'list|10' 表示生成包含 10 个元素的数组,每个元素都是一个对象,'id|+1' 表示自增长的 id 值,'@cname' 表示中文名字,'age|18-60' 表示年龄在 18 到 60 之间随机生成,'@email' 表示邮箱。
配置文件
我们也可以使用 json 配置文件来创建 Mock 数据。以下是一个简单的示例:
-- -------------------- ---- ------- - ------------- - ------ - ---------- -- -------- -- ------- --------- ------------ -- -------- -------- -- - -- ------------- - ------- - -------- - ----------- -------- ----------- -------- -- ------------ - ------- ---- ---------- ------ -- ---------- ---- --------- ---- - - -
上述代码中,配置文件为一个 JSON 对象,每个键值对表示一个 API 路径和对应的请求方法(get、post 等)。$body 表示请求体,$response 表示响应数据,$status 表示状态码,$delay 表示延时时间。
深度内容
自定义函数
Mock 支持使用函数来自定义生成规则。以下是一个示例:
-- -------------------- ---- ------- ----------------------- ------ - ---------- -- -------- -- ------- --------- ------------ -- -------- --------- --------- -------- -- - ------ ---------------------------- -------------------- ------- ------ ------------------- --- - -- --
上述代码中,我们在 avatar 字段中使用了一个自定义函数。该函数调用了 Mock.Random.image 方法来生成随机图片,并根据当前用户的名称生成头像。
拦截 AJAX 请求
Mock 可以拦截浏览器发出的 AJAX 请求并返回 Mock 数据。以下是一个示例:
-- -------------------- ---- ------- ----- --- - --- ---------------- ---------------------- - ---------- - -- --------------- --- -- - ----------------------------- - - --------------- ----- - ----------------------------------------------------------- -------- ----------------------------------------------------------------------------------