vue-cli axios request method and cross-domain processing issues
This article mainly introduces the vue-cli axios request method and cross-domain processing issues. The article also mentions axios in vue to solve cross-domain issues and the use of interceptors. It is very good and has reference value. Friends who need it Please refer to it
vue-cli axios request method and cross-domain processing
Install axios
cnpm install axios --save
Introduce axios into the file where axios is to be used
main.js文件 :import axios from 'axois' 要发送请求的文件:import axios from 'axois'
Set the proxy in the config/index.js file
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'即可 } }
Try it, the cross-domain is successful, but this knowledge of the development environment (dev) solves the cross-domain problem. In the production environment, if it is actually deployed on the server, there will still be cross-domain problems if it is not from the same origin.
axios request method
Get request
// 向具有指定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 request
axios.post('/user', { userId: '10001' //注意post请求发送参数的方式和get请求方式是有区别的 }).then(function (response) { console.log(response); }).catch(function (error) { console.log(error); });
##Added:
Axios in vue solves cross-domain issues and the use of interceptors
1. Axios in vue does not support the vue.use() method of declaration. So there are two ways to solve this: The first one: introduce axios in main.js, and then set it as a property on the vue prototype chain, so that this.axios can be directly accessed in the component Usingimport 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); }) }One thing to note here is that it is invalid to use this to copy the requested data to data in axios, which can be solved by using arrow functions. 1. The local proxy cross-domain problem when the vue cli scaffolding front-end adjusts the back-end data interface, for example, I access the interface on localhost http://10.1.5.11:8080/xxx/duty?time=2017- 07-07 14:57:22', it must be accessed across domains. If accessed directly, XMLHTTPRequest can not load will be reported http://10.1.5.11:8080/xxx/duty?time=2017-07-07 14:57:22'. Response to preflight request doesn't pass access control….Why is there a cross-domain problem? Because this is non-original communication, you can go to Google to learn more. Here you only need to configure the proxyTable in webpack. Find index.js in the config as follows:
config/index.js dev: { 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'即可 } }Cross-domain success, but this is only a cross-domain problem solved in the development environment (dev). In the production environment, if it is actually deployed on the server, there will still be cross-domain problems if it is not from the same origin. For example, the server port we deployed is 3001 , requires front-end and back-end joint debugging. In the first step, we can test the front-end in two environments: production and development. Configure them in config/dev.env.js and prod.env.js, that is, in the development/production environment. The requested address API_HOST, in the development environment we use the proxy address api configured above, and in the production environment we use the normal interface address, so configure it like this, respectively in
config/dev.env.js and
prod .env.jsConfigure the following in the two files.
config/dev.env.js: module.exports = merge(prodEnv, { NODE_ENV: '"development"',//开发环境 API_HOST:"/api/" }) prod.env.js module.exports = { NODE_ENV: '"production"',//生产环境 API_HOST:'"http://10.1.5.11:8080/"' }Of course, you can directly request http://10.1.5.11:8080// in both development and production environments. After configuration, the program will automatically determine whether it is a development or production environment during testing, and then automatically match API_HOST. We can use process.env.API_HOST in any component to use the address, such as: instance.post(process .env.API_HOST 'user/login', this.form)Then in the second step, the back-end server configures cros cross-domain, which is access-control-allow-origin: *All access means . To sum up: In the development environment, our front-end can configure a proxy to cross-domain. In a real production environment, we need the cooperation of the back-end. A certain expert said: This method is not easy to use in IE9 and below. If compatibility is required, the best way is to add a proxy to the server port on the backend. The effect is similar to the webpack proxy during development.
1. Axios sends get post request problem
When sending a post request, you generally need to set Content-Type, the type of content to be sent, application/json refers to sending a json object But you need to stringify it in advance. application/xxxx-form refers to sending? In the format of a=b&c=d, you can use the qs method to format it. qs will be installed automatically after installing axios. You only need to import it in the component.const postData=JSON.stringify(this.formCustomer); 'Content-Type':'application/json'} const postData=Qs.stringify(this.formCustomer);//过滤成?&=格式 'Content-Type':'application/xxxx-form'}
1. Use of interceptors
When we visit an address page, we are sometimes asked to If you log in again and then visit this page, it means that the identity authentication has failed, such as the token is lost, or the token still exists locally, but it has become invalid, so simply judging whether there is a local token value cannot solve the problem. At this time, the server returns a 401 error when requesting, indicating an authorization error, that is, there is no right to access the page. We can filter this situation before sending all requests and before operating the server response data.// 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错误,并重新跳入登页重新获取token axios.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) });Look below
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'即可 } } }
上面是我整理给大家的,希望今后会对大家有帮助。
相关文章:
The above is the detailed content of vue-cli axios request method and cross-domain processing issues. For more information, please follow other related articles on the PHP Chinese website!

Python and JavaScript each have their own advantages, and the choice depends on project needs and personal preferences. 1. Python is easy to learn, with concise syntax, suitable for data science and back-end development, but has a slow execution speed. 2. JavaScript is everywhere in front-end development and has strong asynchronous programming capabilities. Node.js makes it suitable for full-stack development, but the syntax may be complex and error-prone.

JavaScriptisnotbuiltonCorC ;it'saninterpretedlanguagethatrunsonenginesoftenwritteninC .1)JavaScriptwasdesignedasalightweight,interpretedlanguageforwebbrowsers.2)EnginesevolvedfromsimpleinterpreterstoJITcompilers,typicallyinC ,improvingperformance.

JavaScript can be used for front-end and back-end development. The front-end enhances the user experience through DOM operations, and the back-end handles server tasks through Node.js. 1. Front-end example: Change the content of the web page text. 2. Backend example: Create a Node.js server.

Choosing Python or JavaScript should be based on career development, learning curve and ecosystem: 1) Career development: Python is suitable for data science and back-end development, while JavaScript is suitable for front-end and full-stack development. 2) Learning curve: Python syntax is concise and suitable for beginners; JavaScript syntax is flexible. 3) Ecosystem: Python has rich scientific computing libraries, and JavaScript has a powerful front-end framework.

The power of the JavaScript framework lies in simplifying development, improving user experience and application performance. When choosing a framework, consider: 1. Project size and complexity, 2. Team experience, 3. Ecosystem and community support.

Introduction I know you may find it strange, what exactly does JavaScript, C and browser have to do? They seem to be unrelated, but in fact, they play a very important role in modern web development. Today we will discuss the close connection between these three. Through this article, you will learn how JavaScript runs in the browser, the role of C in the browser engine, and how they work together to drive rendering and interaction of web pages. We all know the relationship between JavaScript and browser. JavaScript is the core language of front-end development. It runs directly in the browser, making web pages vivid and interesting. Have you ever wondered why JavaScr

Node.js excels at efficient I/O, largely thanks to streams. Streams process data incrementally, avoiding memory overload—ideal for large files, network tasks, and real-time applications. Combining streams with TypeScript's type safety creates a powe

The differences in performance and efficiency between Python and JavaScript are mainly reflected in: 1) As an interpreted language, Python runs slowly but has high development efficiency and is suitable for rapid prototype development; 2) JavaScript is limited to single thread in the browser, but multi-threading and asynchronous I/O can be used to improve performance in Node.js, and both have advantages in actual projects.


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Zend Studio 13.0.1
Powerful PHP integrated development environment

Notepad++7.3.1
Easy-to-use and free code editor

Dreamweaver Mac version
Visual web development tools

WebStorm Mac version
Useful JavaScript development tools

MantisBT
Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.
