Vue踩坑记(二):在Vue项目中使用axios请求后端
突然发现这个坑一下子就已经一个月了……赶紧更新一下以表示我还没忘记。、
新手在使用Vue的时候可能会有这么一个疑惑,那就是在Vue里要如何使用ajax去请求后端。毕竟使用jQuery的时候直接就能用方便的$.ajax()
方法。
然而Vue里是没有实现ajax的,所以要么自己去实现一个,要么去使用第三方实现,而Vue官方推荐的便是axios。
Vue中使用axios
axios是一个基于promise的HTTP库,项目地址是https://github.com/axios/axios。
要在Vue中集成axios,首先我们进入Vue项目的根目录,使用npm安装:
npm install --save axios
然后,在main.js
中就可以引入axios,并将其添加到Vue的原型属性中:
// main.js
import Axios from 'axios'
Vue.prototype.$axios = Axios;
然后就可以在项目中使用axios访问后端接口了!
详细的使用方式可以参考这个文档:https://www.kancloud.cn/yunye/axios/234845
这里只举几个示例代码:
// get方式
this.$axios.get('/story/getStory', {
params: {
storyId: this.storyId
}
})
.then(response => {
// do something
})
.catch(error => {
// do something
});
// post方式
this.$axios.post('/user/login',{
username: this.username,
password: this.password,
captcha: this.captcha
})
.then(response => {
// do something
})
.catch(error => {
// do something
})
开发环境下临时解决跨域问题
在开发的时候很可能我们的服务端程序和客户端程序不是用同一个web容器运行的,这样就会出现跨域问题,如果实际上线时并不会分开部署前后端,那么可以用下面的方法在开发环境下临时解决跨域问题。
1.修改vue.config.js文件的配置
// vue.config.js
module.exports = {
lintOnSave: false,
devServer: {
port: 8181,
proxy: {
'/api': {
target: 'http://localhost:8080',
changeOrigin: true,
pathRewrite: {
'^/api': '/'
}
}
}
}
}
主要关注的是devServer配置项下的proxy一项,这里的配置意为将所有/api
的地址代理到http://localhost:8080
,这个target地址就填写服务端的对应地址。
这样,运行Vue-Cli测试时,访问http://localhost:8181/api/user/login
就相当于访问http://localhost:8080/user/login
。
2.修改axios的配置
之前我们并没有修改axios的默认配置,现在创建一个http.js
用于管理axios的配置:
// http.js
import axios from "axios";
// 此处可添加axios配置
axios.defaults.baseURL = '/api';
export default axios;
这样我们用axios访问后端时就不需要一个个加上/api
,并且部署测试的时候也可以直接修改这里的baseURL的值即可。
然后main.js
就改为从http.js
中获得axios对象。
// main.js
import axios from "./http";
Vue.prototype.$axios = axios;
// ...
new Vue({
router,
store,
axios,
render: h => h(App)
}).$mount("#app");
这样配置完毕之后,在开发环境下应该就没有跨域问题了。
至于想要在前后端分开部署的情况下解决跨域问题,就不在这篇文章的讨论范围内。(明目张胆的坑掉233)
尾巴
axios还有很多可以配置的东西,不过我现在都还没用到233,总的来说习惯之后用axios来做请求还是写的很舒服的~