遇到的问题:
本地开发项目,开发阶段都是没啥问题,后面到发版阶段,部署到服务器上后,请求所有接口都返回404。

根本原因:
之所以会出现404,原因是本地开发和线上开发接口服务器不一样,请求的ip地址不一样,所以就要把两个环境的url区分开,在axios请求之前重新组装。

原来的打包方式如下截图:
在这里插入图片描述

出错的问题是因为本地环境通过proxy反向代理到了后端接口服务器,项目build打包的过程,并没有把反向代理接口的配置打包进去,而是默认的方式,官网项目域名+接口路径,所以导致404 ,正确的应该是,接口服务域名+接口路径 , 所以为了解决这个问题,在项目的环境配置里新增了环境全局变量,后面打包的时候根据环境动态选择后端接口服务域名,同时修改了以前的http请求的写法,特别是axios请求的URL配置里的hostName 也改成了 动态拼接的,即,当前环境域名+接口名

开发环境 config/dev.env.js

'use strict'
const merge = require('webpack-merge')
const prodEnv = require('./dev.env')

module.exports = merge(prodEnv, {
  NODE_ENV: '"development"',
  API_ROOT: '"https://www.dev.com"'  //本地接口请求前缀
})

线上环境环境 config/prod.env.js

'use strict'
const merge = require('webpack-merge')
const prodEnv = require('./prod.env')

module.exports = merge(prodEnv, {
  NODE_ENV: '"production"',
  API_ROOT: '"https://www.prov.com"'   //线上接口请求前缀
})

在请求之前拦截,重装URL ./assets/js/axios.js
(如果没有axios.js文件,需要自己手动创建)

import Axios from 'axios';
var root = process.env.API_ROOT;
const axios = Axios.create();
//请求拦截
axios.interceptors.request.use((config) => {
    //请求之前重新拼装url
    config.url = root + config.url;
    return config;
});
export default axios;

在Vue使用封装后的axios,在main.js加入

import axios from './assets/js/axios';
Vue.use(axios);

页面正常使用请求

export default {
    name: 'Order',
    data () {
        return {
            order_list: []
        }
    },
    methods: {
        fetchList: function () {
            var self = this;
            self.$axios
                .post('/api/order_list')
                .then((res) => {
                    if(res.result === '0000'){
                        self.order_list = res.data;
                        return;
                    }
                });
        }
    }
}
Logo

前往低代码交流专区

更多推荐