vue.js 本地调用远程接口进行开发,如何进行跨域及cookie传递
在前后端分离vue作为前端框架,在使用服务器接口时面临的第一个问题就是跨域。本文涉及内容仅保证在vue-cli3.0脚手架创建的项目中、及本地调试中有效(使用之前版本脚手架创建的项目请自行转换),本文内容不适用于服务器端前后台打包部署。
一、处理跨域接口调用
1、在项目根目录下建立vue .config.js文件
2、在vue.config.js中配置本地代理进行转发
module.exports = { devServer: { proxy: { '/api': { target: 'https://xxx.xxx', //服务器的地址 secure: true,//如果是https请设置为true changeOrigin: true, pathRewrite: { '^/api': '' } } }, } }
//此时便可将本地Ajax对/api路径的请求通过本地代理转发到 https://xxx.xxx
3、axios配置
import axios from 'axios' //axios.defaults.baseURL = 'https://xxx.com' 全局方式生成环境使用的地址 //const baseURL = 'https://xxx.com' 对象方式生成环境使用的地址 const baseURL = '/api' //本地调试用地址,正式发布时要更换为正式地址 const request = axios.create({ baseURL: baseURL, timeout: 5000 });
axios请求
import request from 'request.js' export function getUserList(query) { return request({ url: '/core/usrt/list', method: 'get', params: query }) }
4、此时就可以在愉快的玩耍了!
二、处理cookie及身份认证
在使用cookie进行身份识别的体统中,虽然可以跨域调用到远程接口了,但是身份认证后才能正常工作的接口此时调用会有类型下面的情况:
真是喜大苦奔/(ㄒoㄒ)/~~
为啥会这样呢:本地调试vue用的localhost,远程接口用的是xxx.com(或192.168.xxx.xxx)。那么仔细观察调试工具的网络请求,你会发现cookie的domain有些不同。
就是因为domain域名不同,所以从A网站来得cookie是不可能被发送大B网站的。我们本地调试用的是localhost,接口自然接受不到身份信息相关的cookie啦,因此调用接口不顺畅。
要解决这个问题需要2步:
1、对接口网站的cookie也进行代理,配置如下:
module.exports = { devServer: { proxy: { '/api': { target: 'https://xxx.com', secure: true, changeOrigin: true, pathRewrite: { '^/api': '' }, cookieDomainRewrite: { 'xxx.com': 'localhost' } } }, } }
2、axios启用cookie、session的配置,这样axios就会在执行Ajax信息的时候携带cookie了:
//axios.defaults.withCredentials = true const request = axios.create({ baseURL: baseURL, timeout: 5000, withCredentials: true//携带身份认证文件(cookie) });
3、重新进行vue本地调试,世界变得丝滑了,可以自由玩耍了!