基于vue-cli的反向代理设置及axios获取json数据

一、后端接口搭建

后端用的是php,自己只是个菜鸟,复习了下基础知识后搭建出来的,环境用的是phpstudy集成环境搭建的。代码如下:

 

<?php 
	header('content-type:application/json;charset=utf8');
	function connect_mysql(){
		
		$servername = "localhost";
		$username = "root";
		$password = "root";
		$dbname = 'test';
		 
		// 创建连接
		$conn = new mysqli($servername, $username, $password,$dbname);
		$conn->query("set character set 'utf8'");
		$conn->query("set names 'utf8'");
		// 检测连接
		if ($conn->connect_error) {
		    die("连接失败: " . $conn->connect_error);
		}	
		return $conn;		
	}
	
	function getAnswer(){
		//查询数据
	  $sql = "SELECT * FROM table_question WHERE 1";
		$con = connect_mysql();
		$result = $con->query($sql);
		
		$arr = array();
		
		if($result->num_rows > 0){
			while($row = $result->fetch_assoc()){
				array_push($arr,$row);
			}
			
		}else {
			echo '0 结果!';
		}
		$data = decodeUnicode(json_encode($arr));
		echo 	$data;		
		$con->close();		
	}
	
	function decodeUnicode($str)//解决json_encode中文乱码问题
	{
	    return preg_replace_callback('/\\\\u([0-9a-f]{4})/i',
	        create_function(
	            '$matches',
	            'return mb_convert_encoding(pack("H*", $matches[1]), "UTF-8", "UCS-2BE");'
	        ),
	        $str);
	}
	
	getAnswer();
	
?>

 

 

结果如下:

 

二、vue-cli反向代理设置

反向代理用来解决前端跨域问题,设置很简单,在vue-cli项目的config文件夹index.js文件下进行如下设置即可:

主要代码如下:

 

proxyTable: {
    	//本地调试
  	  '/phpserver': {		//这里是我配置的名字
		    target: 'http://localhost:90', //这个路径是我代理到本地的php服务器,即你要请求的第三方接口
		    changeOrigin: true, //开启代理:在本地会创建一个虚拟服务端,然后发送请求的数据,并同时接收请求的数据,这样服务端和服务端进行数据的交互就不会有跨域问题
		    pathRewrite: {'^/phpserver': '/phpserver'}	//这里重写路径运行后就代理到对应地址
		  }
    },

注意:这里配置的反向代理名字:phpserver,在后端提供的接口中也应该保持一致,后端应该在php本地服务器的phpserver文件夹下进行接口开发(例如我的接口为:http://localhost:90/phpserver/answer_question),所以这里就可以根据后端提供的接口来进行设置。

 

三、安装axios并进行接口请求

1、打开命令行,进入vue-cli项目中,输入:cnpm install axios --save,回车进行axios安装。

2、在src的main.js中引入axios,并挂载到Vue原型链上,如下:

代码如下:

 

// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'
import axios from 'axios'

Vue.config.productionTip = false
Vue.prototype.$http = axios;

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  template: '<App/>',
  components: { App }
})

 

3、在需要获取数据的组件调用axios的方法:response响应回来的对象,它的data属性就是我们需要的数据,如下所示:

 

主要代码如下:

 

mounted:function(){
		//console.log('llllddd');
		this.$http.get('/phpserver/answer_question/index.php')
	  .then(function (response) {
	    console.log(response);
	  })
	  .catch(function (response) {
	    console.log(response);
	  });
	},

 

获取到的数据如下:

Vue应用程序需要从其他服务器获取数据并遇到跨域限制时,通常会在发送HTTP请求时设置`Content-Type`为`application/json;charset=utf-8`是为了指定请求体的数据格式。JSON格式是常见的API数据交换格式。 要解决Vue应用的跨域问题,你可以尝试以下几种方法: 1. **服务端设置**:如果控制着后端服务器,可以在服务器响应头中添加`Access-Control-Allow-Origin`,允许特定或所有源访问资源。例如: ``` Access-Control-Allow-Origin: * 或 access-control-allow-origin: "http://your-vue-app.com" ``` 2. **CORS预检请求**(CORS Preflight Request):对于某些跨域策略严格的服务器,先发送一个OPTIONS请求(默认不会携带`content-type`),服务器确认后才会发送实际的POST、GET等请求。 3. **Vueaxios库**:如果你使用的是axios库进行API请求,可以配置axios实例来自动添加`withCredentials`属性和适当的CORS配置: ```javascript axios.defaults.withCredentials = true; axios.defaults.headers.common['Content-Type'] = 'application/json'; ``` 4. **代理设置**(如vue-clivue.config.js):在构建工具如webpack的devServer中配置proxy,将前端请求转发到后端服务器,避免直接暴露给浏览器处理跨域问题。 5. **Nginx反向代理**:如果是部署环境,可以在Nginx服务器上配置反向代理,处理跨域请求。 注意,以上措施主要是针对同源策略的限制,如果是同源的情况下,设置`Content-Type`并不会直接影响跨域问题。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值