前端vue项目实现mock数据方式

栏目: IT技术 · 发布时间: 5年前

内容简介:前后端分离开发已成大势所趋,基本上大部分公司的开发模式都是如此,那如何自己本地实现一个数据mock呢?当然你也可以使用在线的工具,比如(1)使用vue-cli初始化全部采用默认即可

前后端分离开发已成大势所趋,基本上大部分公司的开发模式都是如此,那如何自己本地实现一个数据mock呢?当然你也可以使用在线的工具,比如 easymock 也可以实现mock数据,但是如果追求稳定性,还是本地搭一套环境吧。下面我介绍的是使用了vue-cli本身自带的功能实现mock 数据。

初始化项目

(1)使用vue-cli初始化

vue create mock-demo

全部采用默认即可

(2)创建配置文件

在项目根目录下创建vue.config.js配置文件。内容如下:

const bodyParser = require("body-parser");
const isProduction = process.env.NODE_ENV === "production";

let feMock;
if (!isProduction) {
  feMock = require("./mockApi");
}
module.exports = {
  publicPath: isProduction ? "././" : "",
  pages: {
    index: {
      entry: "src/main.js",
      template: "public/index.html",
      filename: "index.html"
    }
  },
  devServer: {
    before: app => {
        // 关键代码
      app.use(bodyParser.json());
      app.use(bodyParser.urlencoded({ extended: true }));
      if (!isProduction) {
        feMock(app);
      }
    }
  }
};

这里主要是利用了webpack-dev-server实现的mock功能,为了实现接口请求,当然需要提前安装axios,body-parser。

npm i axios body-parser -S

编写mock的API

(1)在项目根目录新建文件夹mockApi,新建index.js

const feMock = app => {
  app.get("/mock/api/news", function(req, res) {
    res.json({
      name: "tom"
    });
  });
};
module.exports=feMock;

(2)在src目录下新建一个api文件夹,新建文件index.js

const prefix = "/mock";
export default {
  methods: {
    _testMock() {
      return this.$http.get(`${prefix}/api/news`);
    }
  }
};

这里的请求路径一定要和上一步mock数据的路径保持一致。等后端写好接口之后,统一修改此文件里的prefix接口即可。

组件使用

(1)在App.vue里使用

<script>
import api from "./api";
export default {
  name: "App",
  mixins: [api],
  mounted() {
    this.testMock();
    this.testMock1();
    this.testPostMock();
  },
  methods: {
    testMock() {
      this._testMock()
        .then(res => {
          console.log(res);
        })
        .catch(err => {
          console.log(err);
        });
    }
  }
};
</script>

正常启动项目后,在浏览器network里就可以看到请求了,初始功能实现。

优化

(1)如果项目中多个人写多个mock文件怎么整呢?

(2)能不能直接扫描特定目录加载mock文件呢?是否可以有一个统一的对外入口,每个人只需要写自己的mock文件,不用修改出口?

解决办法

(1)在mockApi文件夹下新建一个mockList文件夹,之后所有人的mock接口写在这里。示例如下:

在mockList中新建一个test.js

function testMock(app) {
  app.get("/mock/api/news", function(req, res) {
    res.json({
      name: "tom"
    });
  });
}

function testPostMock(app) {
  app.post("/mock/api/news", function(req, res) {
    console.log(req.body);
    setTimeout(function() {
      res.json({
        code: 0,
        data: "success",
        desc: ""
      });
    }, 500);
  });
}
module.exports = [testMock, testPostMock];

在mockList中新建一个test1.js

function testMock1(app) {
  app.get("/mock/api/news1", function(req, res) {
    res.json({
      name: "jack"
    });
  });
}
module.exports = [testMock1];

(2)修改mockApi/index.js文件

const fs = require("fs");
const path = __dirname;
const files = fs.readdirSync(path + "/mockList");
const mockList = [];
files.forEach(function(filename) {
  let model = require(path + "/mockList/" + filename);
  mockList.push(...model);
});

function handleMock(app) {
  mockList.forEach(func => {
    func(app);
  });
}

module.exports = handleMock;

引入fs,自动读取设定目录下的文件,这样配置好之后,其他人只管写自己的mock接口,不需要去修改这个对外的文件,这样就完美解决了。

示例代码目录结构如下:

前端vue项目实现mock数据方式


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

天涯虚拟社区

天涯虚拟社区

刘华芹 / 民族出版社 / 2005-11 / 23.00元

网络空间很复杂,好多人并不完全了解或者只是了解到一些皮毛。比如说好多人对于见网友一事总是抱着浪漫或者暖昧的想法,而事实却并不总是想象的那样。作者在做虚拟社区研究甚至是在有这个想法之前并不常呆在网上,互联网对于作者来说就是查查资料、收发信年、看看新闻的工具。担是看着越来越多的人把时间花在网上,一处文化上的直觉告诉作者:有一种新的生活方式产生了。强烈的好奇心驱使着作者走到了网上,走到了天涯虚拟社区,并......一起来看看 《天涯虚拟社区》 这本书的介绍吧!

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具