美文网首页前后分离Vue
前后端分离之跨域和Axios

前后端分离之跨域和Axios

作者: 凌康ACG | 来源:发表于2020-02-23 10:22 被阅读0次

前后端分离使用axios直接请求后面网关可能遇到的问题:
1、Axios跨域问题
2、Axios获取数据失败spring MVC接收数据失败
下面给出多种姿势解决方案,按实际挑选即可。

一、跨域

1、方案

cli 4.x 可在vue.config.js中修改配置:
可参考官网介绍:https://cli.vuejs.org/zh/config/#devserver-proxy

module.exports = {
  devServer: {
    proxy: {
      '/api': {
        target: 'http://api.gateway.com',  //目标接口域名
        pathRewrite: {
          '^/api': ''   //重写接口
        },
        changeOrigin: true,  //是否跨域
      },
      '/foo': {
        target: '<other_url>'
      }
    }
  }
}

cli 4.x除了上面,在直接套用vue-admin-template模板时,可直接修改:
.env.development、.env.production、.env.staging下的VUE_APP_BASE_API:

# base api
# VUE_APP_BASE_API = '/dev-api'
VUE_APP_BASE_API = 'http://gateway:8888'

2、方案

cli 3.x可在config/index.js加入:

 proxyTable: {
      '/api': {
        target: 'http://api.gateway.com',  //目标接口域名
        pathRewrite: {
          '^/api': ''   //重写接口
        },
        changeOrigin: true,  //是否跨域
      },
    },

3、方案

自定义工具类:request.js
优点是可增加request、response拦截,前后端分离采用这种形式

import axios from 'axios'
// create an axios instance
const service = axios.create({
  baseURL: 'http://gateway:8888', // url = base url + request url
  // withCredentials: true, // send cookies when cross-domain requests
  timeout: 5000 // request timeout
})
export default service

调用如下:

import request from 'request'
// ...
function login(username,password) {
  return request({
    url: '/api/oauth/user/login',
    method: 'post',
    {username:username,password:password}
  })
}

二、spring MVC接收数据失败

axios默认发送json数据,spring MVC使用如下接收将失败:

    @PostMapping("/user/login1")
    public ResponseResult login1(String username,String password) {
        SsoUser user = userService.getUserInfo(username);
        if (user == null || !user.getPassword().equals(password)) {
            return new ResponseResult(CodeStatus.FAIL, "账号或密码错误!");
        }
        return new ResponseResult(CodeStatus.OK, "登录成功", result);
    }

2.1 解决方案之改后端

在不改动axios前提下,Spring MVC可使用对象接收,使用@RequestBody注解:这是前后端分离采用的方案

    @PostMapping("/user/login")
    public ResponseResult login(@RequestBody LoginParam loginParam) {
        SsoUser user = userService.getUserInfo(loginParam.getUsername());
        if (user == null || !user.getPassword().equals(loginParam.getPassword())) {
            return new ResponseResult(CodeStatus.FAIL, "账号或密码错误!");
        }
        return new ResponseResult(CodeStatus.OK, "登录成功", result);
    }
LoginParam.java
@Data
public class LoginParam implements Serializable {
    private String username;
    private String password;
}

2.2 解决方案之改Axios

可以直接使用vue自带的ps

import axios from 'axios'
import qs from 'qs'
// ......
axios.post('/api/login',qs.stringify({username:'123',password:'123'}))
    .then((response) => {
        console.log(response)
    })

后台的接收如下:

    @PostMapping("/user/login")
    public ResponseResult login(String username,String password) {
        SsoUser user = userService.getUserInfo(username);
        if (user == null || !user.getPassword().equals(password)) {
            return new ResponseResult(CodeStatus.FAIL, "账号或密码错误!");
        }
        return new ResponseResult(CodeStatus.OK, "登录成功", result);
    }

相关文章

  • 前后端分离之跨域和Axios

    前后端分离使用axios直接请求后面网关可能遇到的问题:1、Axios跨域问题2、Axios获取数据失败sprin...

  • 1、前后端搭建

    预备知识(备查):1)vue+servlet2 ) axios 目标 本章制作前后端分离的项目,前后端实现跨域访问...

  • web开发-跨域问题

    前后端分离容易导致跨域问题,所以前后端都要做相应设置。 前台 React 用axios withCredentia...

  • 使用nginx解决跨域问题

    1.跨域解释 1.1 怎么知道我遇到了跨域问题 如果项目没做前后端分离,是不会有跨域问题的。前后端分离的项目中,前...

  • 01【笔记】 springBoot 前后端分离项目 跨域问题

    springBoot 前后端分离项目 跨域问题

  • Vue学习笔记(一)

    跨域问题 vue前端跨域问题 1. 利用vue-cli框架与axios结合,访问服务器后端接口,axios不需要太...

  • axios 跨域请求(前后端分离)

    与其说是 axios 跨域请求,我觉得不如说是 webpack server 跨域请求,因为这里的跨域请求实现,还...

  • 理解跨域

    引言: 前后端分离之前,不存在跨域限制,因为请求所出的页面和应用服务器所处在同一个域下。而随着前后端的分离,前...

  • 什么是跨域问题?

    什么是跨域问题? 前后端分离,前端服务和后端服务域名不一样,导致前端访问后端服务的时候报错,这个就是Ajax跨域问题

  • vue cli 解决跨域 线上 nginx 反向代理配置

    vue cli 解决跨域 线上 nginx 反向代理配置 前后分离 axios 接 api 跨域问题如图: 解决办...

网友评论

    本文标题:前后端分离之跨域和Axios

    本文链接:https://www.haomeiwen.com/subject/kkvdqhtx.html