Vue解决webpack打包后请求接口404问题
Vue解决webpack打包后请求接口404问题
·
遇到的问题:
本地开发项目,开发阶段都是没啥问题,后面到发版阶段,部署到服务器上后,请求所有接口都返回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;
}
});
}
}
}
更多推荐
已为社区贡献3条内容
所有评论(0)