Vue-mock封装

1、模块化封装方式

  • 目录结构如下

    –modules
    ----login.js
    ----user.js
    ----menu.js
    –index.js

  • login.js文件如下,可根据具体配置

// 获取菜单信息
export function login () {
  return {
    url: '/login',
    type: 'post',
    data: 'token'
  }
}

export function userInfo () {
  return {
    url: '/api/user/info',
    type: 'get',
    data: user
  }
}
  • index.js 文件
import Mock from 'mockjs';
import * as login from './modules/login'
import * as user from './modules/user'
import * as menu from './modules/menu'

// true:开启mock接口
// false:关闭mock接口
fnCreate(login, true)
fnCreate(user, true)
fnCreate(menu, true)

function fnCreate (mod, isOpen = true) {
  if (isOpen) {
    for (var key in mod) {
      ((res) => {
        if (res.isOpen !== false) {
          // let baseUrl="http://localhost:8080/";
          console.log(res.url)
          Mock.mock(new RegExp(res.url), res.type, (opts) => {
            opts['data'] = opts.body ? JSON.parse(opts.body) : null
            delete opts.body
            console.log('\n')
            console.log('%cmock拦截, 请求: ', 'color:blue', opts)
            console.log('%cmock拦截, 响应: ', 'color:blue', res.data)
            return res.data
          })
        }
      })(mod[key]() || {})
    }
  }
}

2、文件配置方式

  • 安装json-server
npm install json-server
  • 在package.json添加启动命令
  "mock": "babel-node build/mock-server.js --presets es2015,stage-0",
  • mock-server.js 文件配置
const jsonServer = require('json-server')
const path = require('path')
const server = jsonServer.create()
const middlewares = jsonServer.defaults()
const config = require("../src/mock/mock.js")

function parseKey(key) {
  var method = 'get';
  var path = key;

  if (key.indexOf(' ') > -1) {
    var splited = key.split(' ');
    method = splited[0].toLowerCase();
    path = splited[1];
  }
  return { method: method, path: path };
}

// Set default middlewares (logger, static, cors and no-cache)
server.use(middlewares)

function createMockHandler(method, path, value) {
  return function mockHandler(...args) {
    const res = args[1];
    if (typeof value === 'function') {
      value(...args);
    } else {
      res.json(value);
    }
  };
}

Object.keys(config).forEach(function (key) {
  var keyParsed = parseKey(key);
  if(!server[keyParsed.method]){
    console.error('method of ' + key + ' is not valid')
  }
  if(!(typeof config[key] === 'function' || typeof(config[key]) === 'object')){
    console.error('mock value of ' + key + ' should be function or object or string, but got ' + typeof(config[key]))
  }
  server[keyParsed.method](keyParsed.path, createMockHandler(keyParsed.method, keyParsed.path, config[key]));
});


server.use(jsonServer.bodyParser)

// mock地址:localhost:3000
server.listen(3000, () => {
  console.log('Mock Server is running')
})
  • mock.js 文件
// 启动mock: npm run mock
const mock = {}
require('fs').readdirSync(require('path').join(`${__dirname}`)).filter(p=>`${p}`!=='mock.js').forEach((file) => {
  Object.assign(mock, require(`./${file}`))
})

module.exports = mock
  • mock数据文件(mock.js 在相同目录)
const Mock = require('mockjs')

module.exports = {
 'GET /sys/user': function (req, res) {
    let res_json = {
      code: 200,
      msg: 'success',
      data: userList
    };
    res.status(200).json(res_json).end()
  }
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值