Vue解决webpack打包后请求接口404问题

本文档详细介绍了在Vue项目中遇到的本地开发与线上部署接口请求404的问题。问题根源在于本地开发环境与线上环境的接口服务器不同。为解决此问题,作者在不同环境的配置文件中定义了API_ROOT变量,用于区分接口请求的前缀。在axios请求前通过拦截器动态组装URL,确保请求正确指向相应环境的接口服务器。最后,展示了在main.js中如何引入和使用封装后的axios,以及在组件中调用接口的例子。
摘要由CSDN通过智能技术生成

遇到的问题:
本地开发项目,开发阶段都是没啥问题,后面到发版阶段,部署到服务器上后,请求所有接口都返回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;
                    }
                });
        }
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值