vue-cli+axios请求与跨域实现步骤详解

这次给大家带来vue-cli+axios请求与跨域实现步骤详解,vue-cli+axios请求与跨域实现的注意事项有哪些,下面就是实战案例,一起来看一下。

安装axios

cnpm install axios --save

登录后复制

在要使用axios的文件中引入axios

main.js文件 :import axios from 'axois'要发送请求的文件:import axios from 'axois'

登录后复制

在config/index.js文件设置代理

 dev: {     proxyTable: {// 输入/api 让其去访问http://localhost:3000/api   '/api':{       target:'http://localhost:3000'//设置调用的接口域名和端口号 ( 设置代理目标)   },   '/api/*':{    target:'http://localhost:3000'   },  changeOrigin: true,   pathRewrite: { //路径重写       '^/api': '/' //这里理解成用‘/api'代替target里面的地址,后面组件中我们掉接口时直接用api代替 比如我要调用'http://localhost:3002/user/add',直接写‘/api/goods/add'即可    }   }

登录后复制

    试一下,跨域成功,但是这知识开发环境(dev)中解决了跨域问题,生产环境中正真部署到服务器上如果是非同源还是存在跨域问题。

axios请求方式

Get请求

 // 向具有指定id的用户发出请求  axios.get('/user?id=1001')   .then(function (response) {    console.log(response.data);   }).catch(function (error) {    console.log(error);   });  // 也可以通过 params 对象传递参数  axios.get('/user', {    params: {     id: 1001    }   }).then(function (response) {//请求成功回调函数    console.log(response);   }).catch(function (error) {//请求失败时的回调函数    console.log(error);   });

登录后复制

post请求

  axios.post('/user', {    userId: '10001' //注意post请求发送参数的方式和get请求方式是有区别的   }).then(function (response) {    console.log(response);   }).catch(function (error) {    console.log(error);   });

登录后复制

补充:

vue中axios解决跨域问题和拦截器使用

1.vue中axios不支持vue.use()方式声明使用。 所以有两种方法可以解决这点:

第一种: 在main.js中引入axios,然后将其设置为vue原型链上的属性,这样在组件中就可以直接 this.axios使用了

import axios from 'axios';Vue.prototype.axios=axios;components:this.axios({    url:"a.xxx",    method:'post',    data:{      id:3,      name:'jack'    }  })  .then(function(res){    console.log(res);  })  .catch(function(err){    console.log(err);  }) }

登录后复制

这里需要注意一点,就是在axios中把请求到的数据 使用this复制给data是无效的,使用箭头函数可以解决。

1.vue cli脚手架前端调后端数据接口时候的本地代理跨域问题,如我在本地localhost访问接口http://10.1.5.11:8080/xxx/duty?time=2017-07-07 14:57:22’,是要跨域的才可以访问的,如果直接访问会报 XMLHTTPRequest can not load http://10.1.5.11:8080/xxx/duty?time=2017-07-07 14:57:22′. Response to preflight request doesn’t pass access control….

为什么存在跨域问题?因为这是非同源互相通讯,具体可以自己去google了解,这里只需要在webpack配置一下proxyTable就OK了,在config中找到index.js如下 :

config/index.jsdev: {  proxyTable: {   '/api': {    target: 'http://10.1.5.11:8080/',//设置你调用的接口域名和端口号     changeOrigin: true,   //跨域    pathRewrite: {     '^/api': '/'     //这里理解成用‘/api'代替target里面的地址,后面组件中我们掉接口时直接用api代替 比如我要调用'http://10.1.5.11:8080/xxx/duty?time=2017-07-07 14:57:22',直接写‘/api/xxx/duty?time=2017-07-07 14:57:22'即可    }   }

登录后复制

跨域成功,但是这只是开发环境(dev)中解决了跨域问题,生产环境中真正部署到服务器上如果是非同源还是存在跨域问题,如我们部署的服务器端口是3001,需要前后端联调,第一步前端我们可以分生产production和开发development两种环境分别测试,在config/dev.env.js和prod.env.js里也就是开发/生产环境下分别配置一下请求的地址API_HOST,开发环境中我们用上面配置的代理地址api,生产环境下用正常的接口地址,所以这样配置,分别在config/dev.env.js和prod.env.js两个文件中进行以下配置。

config/dev.env.js:module.exports = merge(prodEnv, { NODE_ENV: '"development"',//开发环境 API_HOST:"/api/"})prod.env.jsmodule.exports = { NODE_ENV: '"production"',//生产环境 API_HOST:'"http://10.1.5.11:8080/"'}

登录后复制

当然不管是开发还是生产环境都可以直接请求http://10.1.5.11:8080//。配置好之后测试时程序会自动判断当前是开发还是生产环境,然后自动匹配API_HOST,我们在任何组件里都能用process.env.API_HOST来使用地址如:

instance.post(process.env.API_HOST+’user/login’, this.form)

然后第二步后端服务器配置一下cros跨域即可,就是access-control-allow-origin:*允许所有访问的意思。综上:开发的环境下我们前端可以自己配置个proxy代理就能跨域了,真正的生产环境下还需要后端的配合的。某大神说:此方法ie9及以下不好使,如果需要兼容,最好的办法是后端在服务器端口加个代理,效果类似开发时webpack的代理。

1.axios发送get post请求问题

 发送post请求时一般都要设置Content-Type,发送内容的类型,application/json指发送json对象但是要提前stringify一下。application/xxxx-form指发送?a=b&c=d格式,可以用qs的方法格式化一下,qs在安装axios后会自动安装,只需要组件里import一下即可。

const postData=JSON.stringify(this.formCustomer);'Content-Type':'application/json'}const postData=Qs.stringify(this.formCustomer);//过滤成?&=格式'Content-Type':'application/xxxx-form'}

登录后复制

1.拦截器的使用

 当我们访问某个地址页面时,有时会要求我们重新登录后再访问该页面,也就是身份认证失效了,如token丢失了,或者是token依然存在本地,但是却失效了,所以单单判断本地有没有token值不能解决问题。此时请求时服务器返回的是401错误,授权出错,也就是没有权利访问该页面。

 我们可以在发送所有请求之前和操作服务器响应数据之前对这种情况过滤。

// http request 请求拦截器,有token值则配置上token值axios.interceptors.request.use(  config => {    if (token) { // 每次发送请求之前判断是否存在token,如果存在,则统一在http请求的header都加上token,不用每次请求都手动添加了      config.headers.Authorization = token;    }    return config;  },  err => {    return Promise.reject(err);  });// http response 服务器响应拦截器,这里拦截401错误,并重新跳入登页重新获取tokenaxios.interceptors.response.use(  response => {    return response;  },  error => {    if (error.response) {      switch (error.response.status) {        case 401:          // 这里写清除token的代码          router.replace({            path: 'login',            query: {redirect: router.currentRoute.fullPath}  //登录成功后跳入浏览的当前页面          })      }    }    return Promise.reject(error.response.data)   });

登录后复制

下面看下

vue cli脚手架前端调后端数据接口时候的本地代理跨域问题,如我在本地localhost访问接口http://40.00.100.100:3002/是要跨域的,相当于浏览器设置了一到门槛,会报错XMLHTTPRequest can not load http://40.00.100.100:3002/. Response to preflight request doesn’t

pass access control…. 为什么跨域同源非同源自己去查吧,在webpack配置一下proxyTable就OK了,如下 config/index.js

dev: {  加入以下  proxyTable: {   '/api': {    target: 'http://40.00.100.100:3002/',//设置你调用的接口域名和端口号 别忘了加http    changeOrigin: true,    pathRewrite: {     '^/api': '/'        //这里理解成用‘/api'代替target里面的地址,        后面组件中我们掉接口时直接用api代替 比如我要调        用'http://40.00.100.100:3002/user/add',直接写‘/api/user/add'即可    }   }  }

登录后复制

相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!

推荐阅读:

vue渲染时闪烁应如何处理

js获取ModelAndView需要哪些步骤

小程序分享页面返回上一页步骤详解

以上就是vue-cli+axios请求与跨域实现步骤详解的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2763782.html

(0)
上一篇 2025年3月8日 10:14:11
下一篇 2025年2月28日 12:33:44

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • vue开发按钮组件步骤详解

    这次给大家带来vue开发按钮组件步骤详解,vue开发按钮组件的注意事项有哪些,下面就是实战案例,一起来看一下。 当时只是说了一下思路,回来就附上代码。 解决思路: 通过父子组件通讯($refs 和 props) props接受参数, $re…

    编程技术 2025年3月8日
    200
  • vue-cli+bulid配置文件步骤详解

    这次给大家带来vue-cli+bulid配置文件步骤详解,vue-cli+bulid配置文件的注意事项有哪些,下面就是实战案例,一起来看一下。 本文章适合初学者学习,如有错请提出。近期对vue比较感兴趣,所以准备用vue写一个blog。早期…

    2025年3月8日
    200
  • Vue内置component组件应用步骤详解

    这次给大家带来Vue内置component组件应用步骤详解,Vue内置component组件应用的注意事项有哪些,下面就是实战案例,一起来看一下。 官方的说明 渲染一个“元组件”为动态组件。依 is 的值,来决定哪个组件被渲染。 登录后复制…

    2025年3月8日
    200
  • Angular里使用better-scroll插件步骤详解

    这次给大家带来Angular里使用better-scroll插件步骤详解,Angular里使用better-scroll插件的注意事项有哪些,下面就是实战案例,一起来看一下。 better-scroll的使用 由于需要在一个固定的的高度做无…

    编程技术 2025年3月8日
    200
  • JS实现红黑树步骤详解

    这次给大家带来JS实现红黑树步骤详解,JS实现红黑树的注意事项有哪些,下面就是实战案例,一起来看一下。 红黑树的性质 一棵满足以下性质的二叉搜索树是一棵红黑树 每个结点或是黑色或是红色。 根结点是黑色的。 每个叶结点(NIL)是黑色的。 如…

    2025年3月8日 编程技术
    200
  • Node module模块使用详解

    这次给大家带来Node module模块使用详解,Node module模块使用的注意事项有哪些,下面就是实战案例,一起来看一下。 在开发复杂Web应用的时候,通常需要把各个功能进行拆分、封装到不同的文件并在需要的时候引用该文件,即进行代码…

    编程技术 2025年3月8日
    200
  • Vue构建分页组件步骤详解

    这次给大家带来Vue构建分页组件步骤详解,Vue构建分页组件的注意事项有哪些,下面就是实战案例,一起来看一下。 Web应用程序中资源分页不仅对性能很有帮助,而且从用户体验的角度来说也是非常有用的。在这篇文章中,将了解如何使用Vue创建动态和…

    2025年3月8日 编程技术
    200
  • jQuery+Cookie切换皮肤步骤详解

    这次给大家带来jQuery+Cookie切换皮肤步骤详解,jQuery+Cookie切换皮肤的注意事项有哪些,下面就是实战案例,一起来看一下。 最近在学习Jquery,发现Jquery真的是非常强大,短短几行代码就能实现切换皮肤的功能。 1…

    编程技术 2025年3月8日
    200
  • Angular组件交互使用详解

    这次给大家带来Angular组件交互使用详解,Angular组件交互的注意事项有哪些,下面就是实战案例,一起来看一下。 根据数据的传递方向,分为父组件向子组件传递、子组件向父组件传递及通过服务传递三种交互方法。 父组件向子组件传递 子组件通…

    编程技术 2025年3月8日
    200
  • computed与methods使用详解

    这次给大家带来computed与methods使用详解,computed与methods使用的注意事项有哪些,下面就是实战案例,一起来看一下。 computed and methods 拼接展示数据的任务, 也可以用methods完成, 但…

    2025年3月8日
    200

发表回复

登录后才能评论