如何将Vue中Axios请求封装实例代码改写为一个长尾词?
- 内容介绍
- 文章标签
- 相关推荐
本文共计714个文字,预计阅读时间需要3分钟。
Axios 是一个基于 Promise 的 HTTP 库,适用于浏览器和 node.js。它是 Vue 官方推荐的 HTTP 库;封装 Axios,一方面方便后续维护,另一方面可以自定义请求处理;安装 npm 包。
axios
Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中, 也是vue官方推荐使用的dev.xxx.com' } else if (process.env.NODE_ENV === 'production') { axios.defaults.baseURL = 'prod.xxx.com' }
在localhost调试时,直接用开发地址一般都会有跨域的问题,所以我们还需要配置代理
本项目是vue cli3搭建的,代理配置是在vue.config.js文件中:
module.exports = { devServer: { proxy: { '/proxyApi': { target: 'dev.xxx.com', changeOrigin: true, pathRewrite: { '/proxyApi': '' } } } } }
这样就成功把/proxyApi 指向了 'dev.xxx.com',重启服务
修改一下prod.xxx.com' }
拦截器
接着设置超时时间和请求头信息
axios.defaults.timeout = 10000 // 请求头信息是为post请求设置 axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'
axios很好用,其中之一就是它的拦截器十分强大,我们就可以为请求和响应设置拦截器,比如请求拦截器可以在每个请求里加上token,做了统一处理后维护起来也方便,响应拦截器可以在接收到响应后先做一层操作,如根据状态码判断登录状态、授权。
// 请求拦截器 axios.interceptors.request.use( config => { // 每次发送请求之前判断是否存在token // 如果存在,则统一在prod.xxx.com' } // 请求拦截器 axios.interceptors.request.use( config => { token && (config.headers.Authorization = token) return config }, error => { return Promise.error(error) }) axios.defaults.timeout = 10000 axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8' // 响应拦截器 axios.interceptors.response.use(response => { if (response.status === 200) { return Promise.resolve(response) } else { return Promise.reject(response) } }, error => { if (error.response.status) { // 对不同返回码对相应处理 return Promise.reject(error.response) } }) // get 请求 export function httpGet({ url, params = {} }) { return new Promise((resolve, reject) => { axios.get(url, { params }).then((res) => { resolve(res.data) }).catch(err => { reject(err) }) }) } // post请求 export function httpPost({ url, data = {}, params = {} }) { return new Promise((resolve, reject) => { axios({ url, method: 'post', transformRequest: [function (data) { let ret = '' for (let it in data) { ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&' } return ret }], // 发送的数据 data, // url参数 params }).then(res => { resolve(res.data) }) }) }
// api.js import { httpGet, httpPost } from './http' export const getorglist = (params = {}) => httpGet({ url: 'apps/api/org/list', params }) export const save = (data) => { return httpPost({ url: 'apps/wechat/api/save_member', data }) }
// .vue <script> import { getorglist } from '@/assets/js/api' export default { name: 'upload-card', data() {}, mounted() { getorglist({ id: 200 }).then(res => { // console.log(res) }) }, } </script>
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对自由互联的支持。
本文共计714个文字,预计阅读时间需要3分钟。
Axios 是一个基于 Promise 的 HTTP 库,适用于浏览器和 node.js。它是 Vue 官方推荐的 HTTP 库;封装 Axios,一方面方便后续维护,另一方面可以自定义请求处理;安装 npm 包。
axios
Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中, 也是vue官方推荐使用的dev.xxx.com' } else if (process.env.NODE_ENV === 'production') { axios.defaults.baseURL = 'prod.xxx.com' }
在localhost调试时,直接用开发地址一般都会有跨域的问题,所以我们还需要配置代理
本项目是vue cli3搭建的,代理配置是在vue.config.js文件中:
module.exports = { devServer: { proxy: { '/proxyApi': { target: 'dev.xxx.com', changeOrigin: true, pathRewrite: { '/proxyApi': '' } } } } }
这样就成功把/proxyApi 指向了 'dev.xxx.com',重启服务
修改一下prod.xxx.com' }
拦截器
接着设置超时时间和请求头信息
axios.defaults.timeout = 10000 // 请求头信息是为post请求设置 axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'
axios很好用,其中之一就是它的拦截器十分强大,我们就可以为请求和响应设置拦截器,比如请求拦截器可以在每个请求里加上token,做了统一处理后维护起来也方便,响应拦截器可以在接收到响应后先做一层操作,如根据状态码判断登录状态、授权。
// 请求拦截器 axios.interceptors.request.use( config => { // 每次发送请求之前判断是否存在token // 如果存在,则统一在prod.xxx.com' } // 请求拦截器 axios.interceptors.request.use( config => { token && (config.headers.Authorization = token) return config }, error => { return Promise.error(error) }) axios.defaults.timeout = 10000 axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8' // 响应拦截器 axios.interceptors.response.use(response => { if (response.status === 200) { return Promise.resolve(response) } else { return Promise.reject(response) } }, error => { if (error.response.status) { // 对不同返回码对相应处理 return Promise.reject(error.response) } }) // get 请求 export function httpGet({ url, params = {} }) { return new Promise((resolve, reject) => { axios.get(url, { params }).then((res) => { resolve(res.data) }).catch(err => { reject(err) }) }) } // post请求 export function httpPost({ url, data = {}, params = {} }) { return new Promise((resolve, reject) => { axios({ url, method: 'post', transformRequest: [function (data) { let ret = '' for (let it in data) { ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&' } return ret }], // 发送的数据 data, // url参数 params }).then(res => { resolve(res.data) }) }) }
// api.js import { httpGet, httpPost } from './http' export const getorglist = (params = {}) => httpGet({ url: 'apps/api/org/list', params }) export const save = (data) => { return httpPost({ url: 'apps/wechat/api/save_member', data }) }
// .vue <script> import { getorglist } from '@/assets/js/api' export default { name: 'upload-card', data() {}, mounted() { getorglist({ id: 200 }).then(res => { // console.log(res) }) }, } </script>
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对自由互联的支持。

