mock数据

前端mock数据

在这里插入图片描述

mockServer.js

module.exports = function (req, res, next) {
    const method = (req.method || 'GET').toLowerCase();
    const url = req.url.split('?')[0];
    if (req.headers['x-requested-with'] === 'XMLHttpRequest') {
        const base = `../src/mock/${method}${url}/index.js`;
        delete require.cache[require.resolve(base)];
        const json = require(base)();
        res.send(json);
    }
    next();
};

vue.config.js

let path = require("path");
function resolve(dir) {
  return path.join(__dirname, dir);
};
let IS_PRODUCTION = process.env.NODE_ENV === 'production';
module.exports = {
    publicPath: '/',
    lintOnSave: false,
    filenameHashing: false,
    pages: {
        index: {
            // page 的入口
            entry: 'src/main.js',
            // 模板来源
            template: 'public/index.html',
            // 在 dist/index.html 的输出
            filename: 'index.html',
            title: '水浦蓝物联网云平台',
            // 在这个页面中包含的块,默认情况下会包含
            // 提取出来的通用 chunk 和 vendor chunk
            chunks: ['chunk-vendors', 'chunk-common', 'index']
        }
    },
    productionSourceMap: !IS_PRODUCTION,
    configureWebpack: (config) => {
      if (IS_PRODUCTION) {
        //为生产环境进行配置 如:去除console.log ,debugger
        config.optimization.minimizer.map((arg) => {
          const option = arg.options.terserOptions.compress;
          option.drop_console = true; // 打开开关
          return arg;
        });
      } else {
        //为开发环境进行配置
      }
    },
    chainWebpack: config => {
      //设置别名  路径优化,但是若要引用static文件夹下文件,则要用一般设置
      config.resolve.alias
        .set("@", resolve("src"))
        .set("@assets", resolve("src/assets"))
        .set("@components", resolve("src/components"))
        .set("@store", resolve("src/store"))
        .set("@pages", resolve("src/pages"))
        .set("@utils", resolve("src/utils"))
    },
    devServer: {
        port: 8080,
        // proxy: {
        //   '/api-admin': {
        //     target: 'http://192.168.3.139:9400', // 代理接口
        //     changeOrigin: true,
        //     pathRewrite:{
        //       '^/api': ''
        //     }
        //     // pathRewrite: {
        //     //     '^/api': '/mock' // 代理的路径
        //     // }
        //   }
        // },
        before: function (app) {
          app.use(require('./server/mockServer'));
        },
        overlay: {
          warning: false,
          error: true
        }
    }
}

axios.js

import axios from 'axios';
import qs from 'qs';
import bus from './bus';

// 默认配置
let instance = axios.create({
  timeout: 30000,
  headers: {
    // 'Content-Type': 'application/x-www-form-urlencoded',
    'Content-Type': 'application/json',
    'x-requested-with': 'XMLHttpRequest'
  }
});

// 定义拦截器
instance.interceptors.request.use(config => {
  const token = window.localStorage.getItem('token');
  if (token) {
    config.headers.common.Authorization = token;
  }

  return config;
}, error => Promise.reject(error));
instance.interceptors.response.use(response => {
  const code = response.data && +response.data.code;
  if (code) {
    if (code === 401) {
      return bus.$emit('goto', '/login');
    }

    if (code === 409) {
      message({
        message: '你的的账号已经在其他地方登陆或退出登录,请重新登录!',
        type: 'warning'
      });
      return bus.$emit('goto', '/login');
    }

    if (code === 403) {
      return message({
        message: '你没有权限',
        type: 'warning'
      });
    }
  }

  return response;
}, error => {
  return Promise.reject(error);
});

// 封装请求对象
let baseUrl = process.env.VUE_APP_URL;
// console.log(baseUrl);
let request = options => new Promise((resolve, reject) => {
  const method = (options.type || 'GET').toLowerCase();
  let config = {
    method: options.type,
    url: baseUrl + options.url
  };
  if (method === 'post' && options.data) {
    config.data = options.data;
  }
  else {
    if (options.data && !options.params) {
      config.params = options.data;
      delete options.data;
    }
  }
  instance(config).then(data => {
    const result = data.data;
    if (+result.code === 200) {
      return resolve(result);
    }

    return reject(result);
  }).catch(error => {
    reject(error);
  });
});

export default {
  install(Vue) {
    Vue.prototype.$axios = request;
  }
};

bus.js

import Vue from 'vue';
export default new Vue();

main.js 引入 axios

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值