基于Axios完成前后端分离项目数据交互

一、安装Axios

npm i axios -S

封装一个请求工具:request.js

javascript 复制代码
import axios from 'axios'

// 创建可一个新的axios对象
const request = axios.create({
    baseURL: 'http://localhost:9090',   // 后端的接口地址  ip:port
    timeout: 30000
})

// request 拦截器
// 可以自请求发送前对请求做一些处理
// 比如统一加token,对请求参数统一加密
request.interceptors.request.use(config => {
    config.headers['Content-Type'] = 'application/json;charset=utf-8';
    // let user = localStorage.getItem("user") ? JSON.parse(localStorage.getItem("user")) : null
    // config.headers['token'] = 'token'  // 设置请求头

    return config
}, error => {
    console.error('request error: ' + error) // for debug
    return Promise.reject(error)
});

// response 拦截器
// 可以在接口响应后统一处理结果
request.interceptors.response.use(
    response => {
        let res = response.data;

        // 兼容服务端返回的字符串数据
        if (typeof res === 'string') {
            res = res ? JSON.parse(res) : res
        }
        return res;
    },
    error => {
        console.error('response error: ' + error) // for debug
        return Promise.reject(error)
    }
)


export default request

二、在main.js文件中,引入

javascript 复制代码
import Vue from 'vue'
import App from './App.vue'
import router from './router'
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import request from "@/utils/request";
Vue.config.productionTip = false
Vue.use(ElementUI, { size: 'small' });

Vue.prototype.$request=request

new Vue({
  router,
  render: h => h(App)
}).$mount('#app')

在vue 的 methods 中使用 :

或者直接在vue 中引用使用:

三、后端代码解决跨域问题

但是现在就运行程序则会报错

方法一:增加一个 CorsConfig 类

java 复制代码
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;

@Configuration
public class CorsConfig {

    // 当前跨域请求最大有效时长。这里默认1天
    private static final long MAX_AGE = 24 * 60 * 60;

    @Bean
    public CorsFilter corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        corsConfiguration.addAllowedOrigin("*"); // 1 设置访问源地址
        corsConfiguration.addAllowedHeader("*"); // 2 设置访问源请求头
        corsConfiguration.addAllowedMethod("*"); // 3 设置访问源请求方法
        corsConfiguration.setMaxAge(MAX_AGE);
        source.registerCorsConfiguration("/**", corsConfiguration); // 4 对接口配置跨域设置
        return new CorsFilter(source);
    }
}

方法二:在controller层上加上@CrossOrigin 注解

两个方法任选其中一个就行。现在将前后端启动就可以进行数据交互了。

相关推荐
SimonKing14 分钟前
集合的处理:JDK和Guava孰强孰弱?
java·后端·算法
Java微观世界18 分钟前
Java逻辑运算符完全指南:短路与、非短路或、异或的妙用,一篇搞定!
后端
星星电灯猴20 分钟前
数据差异的iOS性能调试:设备日志导出和iOS文件管理
后端
Ghostbaby25 分钟前
stack_traces 创建失败
后端
瀚海澜生26 分钟前
快速掌握使用redis分布式锁
后端
墨夏27 分钟前
TS 高级类型
前端·typescript
程序猿师兄35 分钟前
若依框架前端调用后台服务报跨域错误
前端
yz_518 Nemo38 分钟前
Django项目实战
后端·python·django
胖头鱼不吃鱼38 分钟前
Apipost 与 Apifox:API 协议功能扩展对比,满足多元开发需求
后端
coding随想39 分钟前
对象、类、继承与多态:用“动物园”隐喻玩转OOP
后端