前端使用mockjs模拟接口返回数据

这里开始都是通过mockjs模拟请求返回数据,返回方式这里说自己遇到的两种,一是mock模拟产生随机数据返回,二是读取本地json文件返回。

一、初始化好vue项目之后,执行命令安装依赖包。
初始化项目 vue init webpack mockjs
安装依赖包 npm install mockjs --save-dev
安装依赖包 npm install axios --save

二、封装axios,文件为request.js,根据自己的需要去修改里面的代码。

import axios from 'axios';
import Vue from 'vue';
// 环境的切换
if (process.env.NODE_ENV === 'development') { // 开发环境
  axios.defaults.baseURL = '';
} else if (process.env.NODE_ENV === 'debug') { // debug
  axios.defaults.baseURL = '';
} else if (process.env.NODE_ENV === 'production') { // 线上
  axios.defaults.baseURL = '/main';
}
// 请求超时时间
axios.defaults.timeout = 300000;
// post请求头
axios.defaults.headers.post['Content-Type'] = 'application/json;charset=UTF-8';
// 请求拦截器
axios.interceptors.request.use(
  config => {
    return config;
  },
  error => {
    return Promise.error(error);
  });
// 响应拦截器
axios.interceptors.response.use(
  response => {
    if (response.status === 200) {
      if (response.data.returnCode < 0) {
        Vue.prototype.$message({
          message: response.data.returnMsg,
          type: 'warning'
        });
        return Promise.reject(response);
      } else {
        return Promise.resolve(response);
      }
    } else {
      return Promise.reject(response);
    }
  },
  // 服务器状态码不是200的情况
  error => {
    if (error.response.status) {
      switch (error.response.status) {
        // 404请求不存在
        case 404:
          Vue.prototype.$message({
            message: '网络请求不存在',
            type: 'warning'
          });
          break;
        default:
          Vue.prototype.$message({
            message: error.response.data.returnMsg,
            type: 'warning'
          });
      }
    } else {
      Vue.prototype.$message({
        message: '网络请求超时!',
        type: 'warning'
      });
    }
    return Promise.reject(error);
  }
);
export default {
  /**
   * get方法,对应get请求
   * @param {String} url [请求的url地址]
   * @param {Object} params [请求时携带的参数]
   * @param {Boolean} loadingFlag [是否需要显示遮罩层]
   * @param {Object} headers  请求相关参数设置
   */
  get(url, params, loadingFlag, headers) {
    headers = headers || {};
    let loadingInstance = '';
    /* 如果 loadingFlag 为对象将赋值给 requestObj */
    if (typeof loadingFlag == 'object') {
      headers = loadingFlag;
      loadingFlag = false;
    }
    if (loadingFlag) {
      loadingInstance = Vue.prototype.$loading({
        lock: true,
        text: '请求处理中',
        spinner: 'el-icon-loading',
        background: 'rgba(0, 0, 0, 0.7)'
      });
    }
    return new Promise((resolve, reject) => {
      axios.get(url, {
          params: params,
          headers: headers
        })
        .then(res => {
          if (loadingInstance != '') {
            loadingInstance.close();
          }
          resolve(res.data);
        })
        .catch(err => {
          if (loadingInstance != '') {
            loadingInstance.close();
          }
          reject(err.data);
        });
    });
  },
  /**
   * post方法,对应post请求
   * @param {String} url [请求的url地址]
   * @param {Object} params [请求时携带的参数]
   * @param {Boolean} loadingFlag [是否需要显示遮罩层]
   * @param {Object} headers  请求相关参数设置
   */
  post(url, params, loadingFlag, headers) {
    headers = headers || {};
    let loadingInstance = '';
    /* 如果 loadingFlag 为对象将赋值给 requestObj */
    if (typeof loadingFlag == 'object') {
      headers = loadingFlag;
      loadingFlag = false;
    }
    if (loadingFlag) {
      loadingInstance = Vue.prototype.$loading({
        lock: true,
        text: '请求处理中',
        spinner: 'el-icon-loading',
        background: 'rgba(0, 0, 0, 0.7)'
      });
    }
    return new Promise((resolve, reject) => {
      axios.post(url, params, {
          headers: headers
        })
        .then(res => {
          if (loadingInstance != '') {
            loadingInstance.close();
          }
          resolve(res.data);
        })
        .catch(err => {
          if (loadingInstance != '') {
            loadingInstance.close();
          }
          reject(err.data);
        });
    });
  }
};

三、前面步骤都是一样的,后面开始mock数据并使用。

3.1 先说第一种直接mock产生随机数据并使用。

① 生成mock.js文件,具体的mock使用请参照官方文档https://github.com/nuysoft/Mock/wiki/Getting-Started,代码如下:

// 引入mockjs
const Mock = require('mockjs')
// 获取 mock.Random 对象
const Random = Mock.Random
// 获取 mock.Random 对象
const data = Mock.mock({
  "success": true,
  "message": "操作成功!",
  "code": 0,
  "result|10": [{  // 生成10条数据
    "id|+1": 1,   // id递增1
    "roleName|1": ["测试角色1", "测试角色2", "测试角色3", "测试角色4", "测试角色5"],  // 数组内随机一个值
    "roleCode": "100010",
    "description": null,
    "createBy": "jeecg",
    "createTime": "2019-10-30 19:50:56",
    "updateBy": null,
    "updateTime": null
  }],
  "timestamp": 1573456699794
});
// Mock.mock( url, post/get , 返回的数据);
/** 登录 */
Mock.mock('/api/data', 'post', data)

② 在main.js内加入以下代码引入mock.js,路径根据自己的文件目录调整:

require('./mock.js')

③ 在组件中引用并发出请求:

  • 在组件中引用 import api from '@/axios/request';
  • 在组件中发出请求
api.post('/api/data', {}).then(data => {
	console.log(data);
 }).catch(data => {
 });

至此已经可以成功打印你mock产生的数据。

3.2 第二种模拟数据读取json文件作为返回数据。
① 准备json文件,data.json。

{
  "returnCode": 0,
  "returnMsg": "操作成功",
  "data": [{
      "name": "一一",
      "id": 1
    }]
}

② 模拟接口并读取数据。
文件mock.js:

const Mock = require('mockjs'); // mockjs 导入依赖模块
const util = require('./util'); // 自定义工具模块
// 返回一个函数
module.exports = function (app) {
  // 监听http请求
  app.post('/api/data', function (rep, res) {
      console.log('-----');
    // 每次响应请求时读取mock data的json文件
    // util.getJsonFile方法定义了如何读取json文件并解析成数据对象
    let json = util.getJsonFile('./data/data.json');
    // 将json传入 Mock.mock 方法中,生成的数据返回给浏览器
    res.json(Mock.mock(json));
  });
};

文件util.js:

const fs = require('fs'); // 引入文件系统模块
const path = require('path'); // 引入path模块

module.exports = {
  // 读取json文件
  getJsonFile: function (filePath) {
    // 读取指定json文件
    let json = fs.readFileSync(path.resolve(__dirname, filePath), 'utf-8');
    // 解析并返回
    return JSON.parse(json);
  }
};

③ 在**webpack.dev.conf.js**文件中中加入代码,路径根据自己目录作调整。在这里插入图片描述
④ 在组件中引用并请求。

  • 在组件中引用 import api from '@/axios/request';
  • 在组件中发出请求
api.post('/api/data', {}).then(data => {
	console.log(data);
 }).catch(data => {
 });

至此已经可以成功打印data.json中数据。

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用Mock.js可以方便地模拟数据。在Vue-cli项目,可以通过引入相关模块和配置来使用Mock.js模拟数据。首先,在项目的main.js文件引入mockserver.js模块,并让其执行一遍。这样可以确保Mock.js的相关配置得到正确的加载和初始化。然后,在需要使用模拟数据的地方,可以使用Mock.mock()方法来模拟接口返回数据。例如,可以在一个接口请求的地方使用Mock.mock()来模拟轮播图的数据,通过传入一个对象来定义模拟数据结构。这样,在开发过程就可以使用模拟数据来进行测试和调试,而无需依赖真实的后端接口Mock.js还提供了丰富的数据生成规则和语法,可以根据需求来生成各种类型的模拟数据使用Mock.js模拟数据可以提高开发效率,减少对后端接口的依赖,并且可以模拟各种不同的场景和数据情况,以便更好地测试和调试前端代码。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [使用mockjs模拟数据](https://blog.csdn.net/guhanfengdu/article/details/126021744)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [详解在vue-cli项目下简单使用mockjs模拟数据](https://download.csdn.net/download/weixin_38748769/12950790)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值