devServer.proxy代理、axios网络请求

本文介绍了axios作为Ajax库的使用,包括其特点、安装步骤、在Vue中的全局挂载,以及通过一个登录退出显示用户资料的案例展示了post方法的运用。还涵盖了axios的便捷方法、基础方法、执行结果处理、配置axios以及RESTful接口设计原则。通过实例展示了如何在main.js中导入和挂载axios,并在组件中调用进行登录、退出操作。
摘要由CSDN通过智能技术生成

目录

一、 devServer.proxy代理配置

二、axios是什么

三、axios的特点

四、axios安装

​编辑

五、在vue全局挂载

 登录退出显示用户资料小案例(post方法)

六、axios便捷方法

七、axios基础方法 

 八、axios执行结果

九、config axios配置 

 十、restFul


一、 devServer.proxy代理配置

前言:在vue中发起Ajax请求一般使用第三方库axios来完成,但是在使用前要在vue中配置代理devServer.proxy,代理搭配axios来完成数据请求。

        所以在vue项目中使用axios发送请求前要先配置代理。

devServer.proxy官方案例链接

代理配置演示:

在vue.config.js中添加如下配置:

module.exports = defineConfig({
  // 代理方式一
  /*devServer: {
    proxy: 'http://localhost:4000'
  },*/
  // 代理方式二
  devServer: {
    proxy: {
      '/api': {
        target: 'http://192.xxx.xxx.xxx:30080',
        ws: true, // 用于支持websocket
        changeOrigin: true, // 用于控制请求头中的host值
        // 一般是需要rewrite重写,去除请求地址中多余的/api字段,若是服务器端做了处理,则不需要rewrite处理
        pathRewrite:{'^/api':''}
      },
    }
  }
})

二、axios是什么

axios时目前最流行的ajax封装库之一,用于很方便地实现ajax请求的发送。

三、axios的特点

  1. 前后端都可以使用
  2.  不依赖dom
  3.  拦截扩展强大
  4. 可封装复用性强

四、axios安装

打开cmd命令窗口 cd到项目目录

输入命令:  npm i axios -S 

然后运行项目

五、在vue全局挂载

1、导入(在mian.js中) 

import axios from 'axios'

 2、挂载(在mian.js中)

Vue.prototype.$axios = axios;

 3、使用(在任意需要发送数据请求的组件中)

get请求
axiosGet() {
  this.$axios({
    url: '/api/url',
    method: 'get',
    headers: {
      xxx: xxx,
    },
    params: {
      xxx: xxx
    }
  }).then(result => {
    if (result.data.success) {
      console.log(result.data)
    } else {
      this.$message.error(result.data.message);
      console.log("请求失败")
    }
  })
},
post请求
axiosPost(data) {
  this.$axios({
    url: "/api/url",
    method: "post",
    headers: {
      xxx: xxx,
    },
    data: data,
  }).then((result) => {
    if (result.data.success) {
      this.$message.success("请求成功");
      console.log(result.data)
    } else {
      this.$message.error(result.data.message);
      console.log("请求失败")
    }
  });
},

 登录退出显示用户资料小案例(post方法)

<template>
	<!-- 登录退出小案例 -->
	<!-- 试用账号:奇酷彭于晏 密码:qkpyy -->
	<div>
		<!-- 通过判断本地存储token来切换显示容器 -->
		<div v-if="token">
			<p>姓名:{{userInfo.name}}</p>
			<p>等级:{{userInfo.rank}}</p>
			<p>积分:{{userInfo.score}}</p>
			<button type="button" @click="loginout">退出</button>
		</div>
		<div v-else>
			<h1>登录页面</h1>
			用户名<input type="text" v-model="user.name" /><br>
			密码<input type="password" v-model="user.password" />
			<button type="button" @click="login">登录</button>
		</div>
	</div>
</template>
<script>
	export default {
		data() {
			return {
				user: {//此处对象名必须与下侧 axios方法中请求数据名称一致吗???
					name: '',
					password: ''
				},
				// 从本地获取用户信息 parse把json字符串转换为js对象
				userInfo: JSON.parse(localStorage.getItem("userInfo")||"{}"),//用户数据
				// 从本地获取token,字符串不需要pase转
				token: localStorage.getItem("token"),//token
			}
		},
		methods: {
			// 登录方法
			login() {
				this.$axios.post(
						"http://dida100.com:8888/api/login",//请求的地址
						this.user,//请求数据 //此处对象名必须与上侧侧 data中自定义双向绑定数据一致吗???
					)
					// 成功回调函数
					.then(res => {
						// 网络请求成功
						if (res.data.code === 200) {
							alert("登录成功")
							// 将请求到的数据转为JSON字符串存储起来
							localStorage.setItem("userInfo", JSON.stringify(res.data.user));
							localStorage.setItem("token", res.data.token);
							// 更新数据
							this.userInfo = res.data.user;
							this.token = res.data.token;
							console.log(res.data)
						} else {
							alert("登录失败")
						}
					})
					.catch(err => {
						console.error(err)
					})
			},
			// 退出登录
			loginout(){
				// 清空用户信息与token
				this.userInfo={};
				this.token=null;
				localStorage.removeItem("userInfo")
				localStorage.removeItem("token")
				alert("退出成功")
			}
		}
	}
</script>

六、axios便捷方法

  1.  post(url , data , config)
  2.  get(url , config)  
  3.  .delete(url,config)   删除
  4.  .put(url,data,config)    修改

七、axios基础方法 

axios({
url,//请求的地址
method,//请求方法 get,post,put,dalete
data,post请求的数据
params,//get请求的数据
headers,//请求头配置
})  

实例:

          sendMsg() {
				// 基础方法
				this.$axios({
						url: "/api/feed",
						method: "post",
						data: {
							msg: this.msg
						}
					})
					.then(res => {
						// alert(res.data.msg);
						if (res.data.code == 0) {
							// 让页面回归第一1
							this.current = 1;
							// 获取评论列表
							this.getFeed();
							// 清空评论框
							this.msg = '';
						}
					})
			},

 八、axios执行结果

网络请求成功
.then(res=>{
res.data  请求返回的数据
}

请求失败
.catch(err=>{
err.response.data  返回失败数据
}  

九、config axios配置 

配置请求头信息 

 "Authorization": 'Bearer ' + localStorage.getItem('token') 

实例:

// 给每个请求拦截一下,添加请求Token信息
axios.interceptors.request.use(function(config){
	config.headers.Authorization = 'Bearer '+localStorage.getItem("token");
	return config;
})

 十、restFul

1.接口的设计风格
2.强调每个url地址都是一个资源
3.可以通过get,post,put,delete操作资源
4.get获取,post新增,put修改,delete删除

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: vue.js 是一个开源的 JavaScript 框架,用于构建用户界面,而 axios 是一个基于 promise 的 HTTP 客户端,用于在浏览器和 Node.js 中发送 HTTP 请求。 在 vue.js 中使用 axios 进行跨域访问时,可能会出现跨域访问错误。跨域是指在浏览器中通过 JavaScript 发起一个 HTTP 请求,该请求的目标服务器是与当前页面不同域名、端口或协议的地址。 解决这个问题的方法有多种: 1. 后端配置允许跨域访问:在后端服务器中进行配置,允许指定的域名或端口进行跨域访问。 2. 使用代理进行跨域请求:在 vue.config.js 文件中配置代理,将跨域请求转发到目标服务器。例如,在 vue.config.js 文件中添加以下配置: ```javascript module.exports = { devServer: { proxy: { '/api': { target: 'http://api.example.com', changeOrigin: true, pathRewrite: { '^/api': '' } } } } }; ``` 这样,当你在前端代码中发送以“/api”开头的请求时,将会使用代理进行跨域请求。 3. JSONP:如果目标服务器支持 JSONP,可以使用 JSONP 进行跨域请求。在 axios 中,默认是不支持 JSONP 的,但可以通过配置实现。例如,在请求中添加“jsonp”参数: ```javascript axios.get('http://api.example.com/data', { params: { callback: 'jsonCallback', dataType: 'jsonp' } }) .then(response => { console.log(response.data); }) .catch(error => { console.error(error); }); ``` 通过以上方法,可以解决 vue.jsaxios 跨域访问错误问题。根据具体情况选择合适的解决方法,以确保跨域请求能够正常进行。 ### 回答2: Vue.js中使用axios请求数据时,常常会遇到跨域访问错误。这是因为浏览器的同源策略限制了不同域名之间的访问。 解决这个问题的方法有几种: 1. 使用代理 可以在项目的配置文件(vue.config.js或者nuxt.config.js)中配置代理。通过将请求代理到同域名下的接口,实现跨域访问。 例如,可以在配置文件中添加如下代码: ```javascript module.exports = { devServer: { proxy: { '/api': { target: 'http://api.example.com', changeOrigin: true, pathRewrite: { '^/api': '' } } } } } ``` 然后,在axios请求中使用相对路径(不包含域名)进行访问。例如: ```javascript axios.get('/api/data') .then(response => { console.log(response.data) }) ``` 这样就可以跨域访问目标接口了。 2. 设置服务器响应头 在目标服务器上,设置允许跨域访问的响应头。一般来说,可以在后端的接口代码中添加以下响应头: ```javascript app.use(function(req, res, next) { res.header('Access-Control-Allow-Origin', '*'); res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept'); next(); }); ``` 这样浏览器就会允许跨域访问该接口了。 3. JSONP JSONP是一种前端跨域访问的解决方案。通过在请求中添加一个回调函数作为参数,服务器将返回该函数的调用,并将数据作为参数传递给该函数。 例如,在axios请求中使用JSONP: ```javascript axios.jsonp('http://api.example.com/data?callback=handleData') .then(response => { console.log(response.data) }) ``` 然后,在全局定义一个处理返回数据的函数: ```javascript function handleData(data) { console.log(data) } ``` 这样就可以通过JSONP实现跨域访问了。 以上是几种解决Vue.jsaxios跨域访问错误的方法,可以根据具体情况选择使用。 ### 回答3: 在Vue.js中,由于浏览器的同源策略,如果我们的Vue应用与后端接口的域名或端口不一致,会出现跨域访问错误。然而,我们可以使用axios库来解决这个问题。 首先,为了解决跨域访问错误,我们可以在后端的API接口中添加响应头Access-Control-Allow-Origin: *,允许所有来源的请求访问接口。当然,我们也可以根据需求设置特定的源或域名。 另外,我们还可以通过设置代理来解决跨域访问问题。在项目的根目录下的`vue.config.js`文件中,我们可以使用`devServer`配置项来设置代理。例如,我们可以将/api路径下的请求代理到http://localhost:8000路径下,具体配置如下: ``` module.exports = { devServer: { proxy: { '/api': { target: 'http://localhost:8000', changeOrigin: true, pathRewrite: { '^/api': '' } } } } } ``` 以上配置意味着,当我们的Vue应用发起/api路径下的请求时,它将被代理到http://localhost:8000路径下。`changeOrigin`选项设置为true时,请求头中的host会被设置为目标url,同时`pathRewrite`选项可以重写请求路径,删除/api前缀。 在前端代码中,我们可以使用axios来发起跨域请求。例如,我们可以在Vue的组件中使用axios请求后端接口: ``` import axios from 'axios' export default { methods: { fetchData() { axios.get('/api/data') .then(response => { // 处理响应数据 }) .catch(error => { // 处理错误 }) } } } ``` 通过以上方法,我们可以解决Vue.jsaxios跨域访问错误问题,实现与后端接口的跨域通信。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值