前端本地mock数据

这篇博客介绍了如何利用json-server在前端本地创建mock数据。通过设置文件结构,包括data、db、router和server文件,配合package.json配置运行命令,可以启动mock服务器。在.env.dev文件中进行配置后,调用接口时,执行npm run mock,即可访问本地http://localhost:3006/***接口获取mock数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用json-server插件

文件结构

在这里插入图片描述

data文件

在这里插入图片描述
data文件呢是存储mock数据的
比如:defaultRes.js文件里面如下:
完全模拟 接口返回格式

const Mock = require('mockjs')

const result = Mock.mock({
  code: 1,
  msg: 'success',
  errorMsg: 'success',
  content: {
    formCode: '5555555',
    formType: 0,
    formName: '表单5'
  }
})

module.exports = result

db文件

官方文档:
在这里插入图片描述

// db.js
const defaultRes = require('./data/defaultRes')
// 通过使用mock.js,来避免手写数据
module.exports = {
  defaultRes,
 }

相当于导出一个json

{
defaultRes:{
  code: 1,
  msg: 'success',
  errorMsg: 'success',
  content: {
    formCode: '5555555',
    formType: 0,
    formName: '表单5'
  }
}
}

router文件

官方文档
在这里插入图片描述

module.exports = {
'/ProjectApiService/addOrUpdateProjectInfo': '/defaultRes',
}

server文件

在这里插入图片描述
在这里插入图片描述

const jsonServer = require('json-server')
const db = require('./db.js')
const routes = require('./routes.js')

const port = 3006

const server = jsonServer.create()
// 使用mock的数据生成对应的路由
const router = jsonServer.router(db)
const middlewares = jsonServer.defaults()
// 根据路由列表重写路由
const rewriter = jsonServer.rewriter(routes)

server.use(middlewares)
// 将 POST 请求转为 GET,满足可以接受 POST 和 GET 请求的需求
server.use((request, res, next) => {
  request.method = 'GET'
  next()
})

server.use(rewriter) // 注意:rewriter 的设置一定要在 router 设置之前
server.use(router)

server.listen(port, () => {
  console.log(`open mock server at localhost:${port}`)
})

package.json文件配置运行命令

"scripts": {
    "serve": "vue-cli-service serve",
    "mock": "nodemon --watch mock mock/server.js",
    "dev": "vue-cli-service serve --mode dev",
    "serve:pre": "vue-cli-service serve --mode pre",
    "serve:prod": "vue-cli-service serve --mode production",
    "build": "vue-cli-service build --mode production",
    "build:pre": "vue-cli-service build --mode pre",
    "build:test": "vue-cli-service build --mode development",
    "lint": "vue-cli-service lint"
  },

启动项目

npm run dev
npm run mock

根据命令可以看到 肯定是要新建.env.dev文件做配置的

.env.dev文件
ENV = dev
NODE_ENV = dev

调用接口时

可见链接https://blog.youkuaiyun.com/etemal_bright/article/details/112320668

// 若当前是本地开发环境,则走mock数据
if (process.env.NODE_ENV === 'dev') {
  Fetch.interceptors.push((request: any, next: any) => {
    const { url, options } = request
    const mockUrl = url.replace(options.root, 'http://localhost:3006')
    request.url = mockUrl
    next()
  })
}

这样执行npm run mock时就调用本地http://localhost:3006/*** 接口了

### 如何在前端项目中使用 Mock 模拟数据 #### 使用 MockJS 进行数据模拟 MockJS 是一个强大的 JavaScript 库,专门用于生成模拟数据,在前端开发过程中可以用来替代真实的 API 接口响应[^1]。 为了实现这一目标,开发者可以在项目的合适位置安装并引入 MockJS: ```bash npm install mockjs --save-dev ``` 接着,在需要的地方导入此库,并定义所需的数据模板。下面是一段简单的代码片段展示如何创建和配置模拟数据源: ```javascript // 引入mockjs模块 const Mock = require('mockjs'); // 定义一组测试用的JSON结构体以及相应的随机规则 let testData = { 'list|1-10': [{ 'id|+1': 1, 'name': '@cname', 'age|18-60': 1, 'address': '@county(true)' }] }; // 调用Mock.mock()方法生成虚拟数据集 let resultData = Mock.mock(testData); console.log(JSON.stringify(resultData, null, 4)); ``` 这段脚本会基于给定模式自动生成一系列具有特定范围内的属性值的对象数组,并将其打印出来供调试查看[^2]。 #### 实现请求拦截与返回模拟数据 除了单纯制造静态样例之外,更进一步的做法是在实际HTTP交互层面做文章——即当浏览器发出某个指定URL路径下的GET/POST请求时,不是真的去访问服务器端而是由本地程序接管处理流程,即时构造出期望的结果反馈回去。这通常涉及到对Express.js或其他Node框架的支持;但对于纯客户端应用来说,则可通过修改`axios.defaults.baseURL`或者利用代理机制达到相同效果。 这里给出一段具体的例子说明怎样设置路由匹配规则以便于捕获特定API调用并将预设好的假数据回传给页面逻辑层消费: ```javascript import Mock from 'mockjs'; import axios from 'axios'; // 假设有这样一个待仿造的服务地址 '/api/users' axios.interceptors.request.use(config => { if (config.url === '/api/users') { config.url = `/mock${config.url}`; } return config; }); // 创建一个新的express应用程序实例(如果不在node环境中可省略) // const app = express(); // 注册一条新的GET类型的RESTful风格资源映射关系 app.get('/mock/api/users', function(req, res){ let users = Mock.mock({ "users|5": [ {"id|+1": 1,"username":"@first","email":"@email"} ] }).users; setTimeout(() => { res.status(200).json(users); // 返回延迟后的结果模仿网络延时现象 }, Math.random()*1000 + 500); // 随机等待一段时间再作回应增加真实感 }); ``` 上述代码展示了如何通过 Axios 的请求拦截器改变 URL 来指向我们自己设定的 mock 地址,同时配合 Express 设置了一个 GET 请求处理器来伪造用户列表查询场景中的服务端行为。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值