在Vue中使用axios全局挂载默认配置代理跨域

Axios 是什么?

Axios 是一个基于 promise 的 HTTP 库,简单的讲就是可以发送get、post请求。由于vue不再操作操作dom,也就不用导入jQuery,所以axios轻量级库更加适合。

Axios使用步骤

npm i axios -S
import axios from 'axios'
注意:从node_modules导入的包不需要加../.../

get请求的几种写法

axios.post(url,data,config).then().catch()
 
//data格式与config配套的(用哪种格式看接口文档)
axios.post(
	"/index_login.php",
	"name=mewow&age=18",
	{headers:{'Content-Type':'application/x-www-form-urlencoded'}}
	)
			
axios.post("/index_login.php",
	{name:"mewow",age=18},
	{headers:{'Content-Type':'application/json'}}
	)
 
axios({
    url:请求地址,
    method:"post",
    data:请求参数,
    headers:{请求头信息}
}).then().catch()

post请求的几种写法

<template>
  <div>
    <input v-model="message" @keyup.enter="sendMessage">
    <button @click="sendMessage">Send</button>
    <ul>
      <li v-for="msg in messages">{{ msg }}</li>
    </ul>
  </div>
</template>
 
<script>
export default {
  data() {
    return {
      message: '',
      messages: [],
      socket: null
    }
  },
  created() {
    this.socket = new WebSocket('ws://localhost:3000')
    this.socket.addEventListener('message', this.handleMessage)
  },
  beforeDestroy() {
    this.socket.close()
  },
  methods: {
    sendMessage() {
      this.socket.send(this.message)
      this.message = ''
    },
    handleMessage(event) {
      this.messages.push(event.data)
    }
  }
}
</script>

Axios其他设置

全局挂载

每次使用axios都要再页面引入过于麻烦,所以可以在main.js中进行全局挂载

improt axios from 'axios'

默认配置

//默认请求域名
axios.defaults.baseURL = "/"
//post请求默认请求头
axios.defaults.headers.post['Content-Type'] ='application/x-www-form-urlencoded';
//默认请求超时
axios.defaults.timeout = 5000;
//挂载
const app = createApp(App);
app.config.globalProperties.$http = axios;
app.use(store).use(router).mount('#app')
//$http自定义名称 建议$http

四、通过代理解决跨域问题

const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
  transpileDependencies: true,
  devServer:{
	  proxy:{
		  // .php 代理标识符(当请求地址包含.php 字符启用代理)
		  ".php":{
			  // 本地服务器向 target服务器请求数据
			  target:"https://www.520mg.com/",
			  // 允许跨域
			  changeOrigin:true,
		  }
	  }
  }
})

总结

axios可以使数据请求更简单方便,学习使用axios优化自己的项目。

<think>好的,用户想在Vue项目中使用通过npm全局安装的axios包,我需要先确认全局安装和项目内安装的区别。通常npm全局安装的包是用于命令行工具,而项目内安装的包才会被项目代码引用。但用户可能误解了“全局安装”的概念,认为在项目里全局可用,所以需要解释清楚。 根据提供的引用内容,比如引用[1]提到在集成终端用npm安装axios,引用[2]和[3]都展示了在main.js中引入axios并挂载到Vue原型链上的方法。这说明正确的做法是在项目本地安装axios,而不是全局安装。用户可能混淆了全局安装和全局引入的概念。 接下来,我需要分步骤说明如何在Vue项目中正确安装和使用axios。首先应该建议用户使用npm或yarn在项目本地安装axios,然后通过修改main.js,将axios挂载到Vue的原型上,这样所有组件都可以通过this.$axios访问。同时,也可以展示局部引入的方法,供用户根据情况选择。 另外,要注意用户可能遇到的问题,比如是否需要使用Vue.use(),但根据引用[3],axios不能通过Vue.use()来使用,必须直接挂载到原型链。这一点需要特别提醒,避免用户犯错。 最后,生成相关问题时要围绕axiosVue中的使用,比如错误处理、拦截器配置、替代方案等,帮助用户进一步学习相关知识点。同时,确保所有代码示例符合用户提供的引用内容中的正确方法,避免误导。</think>### 如何在 Vue 中引入并使用 Axios #### 1. **安装 Axios** 首先需要在项目本地安装 axios(即使全局安装过,项目内仍需本地安装): ```bash npm install axios # 或使用 yarn add axios ``` 注意:npm 全局安装(`npm install -g axios`)无法直接在 Vue 项目中使用,因为全局安装的包通常用于命令行工具而非代码依赖[^1]。 --- #### 2. **全局引入(推荐)** 在 `main.js` 中配置,使所有组件可通过 `this.$axios` 调用: ```javascript import Vue from 'vue'; import axios from 'axios'; // 挂载到 Vue 原型链 Vue.prototype.$axios = axios; new Vue({ // ...其他配置 }).$mount('#app'); ``` 使用时直接通过 `this.$axios.get()` 或 `this.$axios.post()` 调用[^2][^3]。 --- #### 3. **局部引入** 在单个组件中按需引入: ```vue <script> import axios from 'axios'; export default { methods: { async fetchData() { const response = await axios.get('https://api.example.com/data'); console.log(response.data); } } } </script> ``` --- #### 4. **配置默认参数(可选)** 在 `main.js` 中设置全局默认值: ```javascript axios.defaults.baseURL = 'https://api.example.com'; axios.defaults.timeout = 5000; ``` --- ### 注意事项 - **错误处理**:建议添加拦截器统一处理异常 - **问题**:需配置后端 CORS 或 Vue 代理 - **SSR 场景**:需使用 `axios.create()` 创建独立实例
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值