当前位置: 首页 > news >正文

海口网站运营托管咨询电子商务网站建设合同样本

海口网站运营托管咨询,电子商务网站建设合同样本,简单网页编辑软件,中亿丰建设集团股份有限公司网站在 Vue 项目中封装请求拦截器和响应拦截器通常使用 Axios 库。以下是一个完整的封装示例,包含基础配置、拦截器实现和错误处理:### 第一步:安装 Axios bash npm install axios ### 第二步:创建封装文件 src/utils/request.js java…

在 Vue 项目中封装请求拦截器和响应拦截器通常使用 Axios 库。以下是一个完整的封装示例,包含基础配置、拦截器实现和错误处理:

### 第一步:安装 Axios
```bash
npm install axios
```

### 第二步:创建封装文件 `src/utils/request.js`
```javascript
import axios from 'axios'
import { Message } from 'element-ui' // 按需引入 UI 框架提示组件
import router from '@/router' // 引入路由实例

// 创建 axios 实例
const service = axios.create({
baseURL: process.env.VUE_APP_BASE_API, // 从环境变量读取基础 URL
timeout: 10000, // 请求超时时间
headers: { 'Content-Type': 'application/json;charset=UTF-8' }
})

// 请求拦截器
service.interceptors.request.use(
config => {
// 在发送请求之前做些什么(例如添加 token)
const token = localStorage.getItem('token')
if (token) {
config.headers['Authorization'] = `Bearer ${token}`
}

// 可添加全局 loading 控制
// showLoading()

return config
},
error => {
// 对请求错误做些什么
return Promise.reject(error)
}
)

// 响应拦截器
service.interceptors.response.use(
response => {
// 隐藏全局 loading
// hideLoading()

// 处理二进制数据
if (response.config.responseType === 'blob') {
return response.data
}

const res = response.data

// 根据后端约定判断业务状态码
if (res.code !== 200) {
// 处理特殊状态码(如 token 过期)
if (res.code === 401) {
Message.error('登录已过期,请重新登录')
router.push('/login')
return Promise.reject(new Error('未授权'))
}

// 显示错误提示(可配置不显示特定状态码)
if (!response.config.noShowError) {
Message.error(res.message || '请求失败')
}

return Promise.reject(new Error(res.message || 'Error'))
} else {
// 返回核心数据
return res.data
}
},
error => {
// 隐藏全局 loading
// hideLoading()

// 处理 HTTP 状态码错误
if (error.response) {
switch (error.response.status) {
case 400:
error.message = '请求错误'
break
case 401:
error.message = '未授权,请登录'
router.replace('/login')
break
case 403:
error.message = '拒绝访问'
break
case 404:
error.message = `请求地址出错: ${error.response.config.url}`
break
case 500:
error.message = '服务器内部错误'
break
default:
error.message = `连接错误 ${error.response.status}`
}
} else if (error.message.includes('timeout')) {
error.message = '请求超时,请检查网络'
} else {
error.message = '网络连接异常'
}

Message.error(error.message)
return Promise.reject(error)
}
)

/**
* 封装通用请求方法
* @param {Object} config 请求配置
*/
export function request(config) {
return service(config)
}

/**
* 封装 GET 请求
* @param {String} url 
* @param {Object} params 
* @param {Object} options 额外配置 
*/
export function get(url, params = {}, options = {}) {
return service({
url,
method: 'get',
params,
...options
})
}

/**
* 封装 POST 请求
* @param {String} url 
* @param {Object} data 
* @param {Object} options 额外配置
*/
export function post(url, data = {}, options = {}) {
return service({
url,
method: 'post',
data,
...options
})
}

// 导出其他常用方法
export default {
request,
get,
post,
put: (url, data) => service({ url, method: 'put', data }),
delete: url => service({ url, method: 'delete' })
}
```

### 第三步:在 Vue 中全局引入(可选)
`src/main.js`
```javascript
import Vue from 'vue'
import request from '@/utils/request'

Vue.prototype.$http = request // 组件内使用 this.$http.get(...)
```

### 第四步:在组件中使用
```vue
<script>
import { get, post } from '@/utils/request'

export default {
methods: {
// GET 请求示例
async fetchData() {
try {
const res = await get('/api/user/list', {
page: 1,
size: 20
}, {
noShowError: true // 可选:禁止自动显示错误
})
console.log('数据获取成功', res)
} catch (err) {
console.error('请求失败', err)
}
},

    // POST 请求示例
async submitForm() {
const data = { username: 'admin', password: '123456' }
const res = await post('/api/login', data)
console.log('登录结果', res)
},

    // 使用全局注入方式
async deleteItem() {
const res = await this.$http.delete('/api/item/123')
console.log('删除结果', res)
}
}
}
</script>
```

### 关键功能说明:
1. **请求拦截器**:
- 自动添加 JWT 认证 Token
- 统一设置 Content-Type
- 全局 Loading 控制点(需自行实现)

2. **响应拦截器**:
- 处理二进制响应数据
- 统一处理业务错误码(如 401 跳转登录)
- 捕获 HTTP 状态码错误
- 网络异常处理(超时/断网)

3. **灵活配置**:
- `noShowError` 参数:禁止自动错误提示
- 环境变量管理 API 地址
- 支持特殊响应类型(如 blob)

4. **错误处理**:
- 分类处理网络错误/业务错误
- 自动显示友好错误提示
- 401 自动跳转登录页

### 最佳实践建议:
1. **环境配置**:在 `.env.development` 和 `.env.production` 中配置不同的 `VUE_APP_BASE_API`
2. **错误处理**:可在拦截器中添加错误日志上报
3. **重试机制**:可在响应拦截器中添加请求重试逻辑
4. **取消请求**:添加请求取消功能(使用 axios CancelToken)
5. **文件上传**:单独封装上传方法,处理进度事件

通过这种封装方式,可以实现:
- 统一处理认证逻辑
- 减少重复代码
- 集中管理 API 错误
- 增强请求的可控性
- 快速适配后端接口变更

http://www.dtcms.com/a/505520.html

相关文章:

  • 虚拟机做网站网站界面设计套题
  • 做个电商网站和app公司营销网站制作
  • wordpress建站教程贴吧微信扫描 WordPress
  • 郑州网站制作计划权重7以上的网站
  • 企业网站 案例wordpress注册直接显示密码
  • 程序员做外包网站wordpress实惠主机
  • 彩票网站建设制作如何在线实现手机版网站建设
  • 镇江市建设工程网站网站seo设置是什么
  • 响应式网站建设的优势赣州网站建设设计
  • 怎么建立网站数据库wordpress 文章 排序
  • 小工厂怎么做网站软件开发工具排行
  • wordpress增加面包屑导航四川seo推广
  • 网络科技公司网站源码永久新域名225222
  • 贷款网站建设医疗网站建设新闻
  • 南京做网站哪家公司好wordpress主机和域名绑定域名
  • 深圳做棋牌网站建设找哪家公司好网站超市
  • 阳江公司做网站男的和女的做那个视频网站
  • 网站建设美化中期报告跨境电商选品的策略和方法
  • 长春市做网站的公司网页特效模板
  • 网站主服务器域名成都网站建设公司创新互联
  • 网站建设可行性报告范文wordpress主题 问答
  • 第六感聊城网站建设郑州最好的装修设计公司
  • 如何在虚拟机中建设网站手机网站建设设计公司
  • 网站建设所需域名汕头网站制作公司价格
  • 设计网站用户需求分析报告商业网站设计与制作论文
  • 淘宝客建网站西安seo交流
  • 网站备案证书带产品列表 wordpress
  • 福州门户网站建设个人备案的网站可以卖东西么
  • 建立网站后台江西赣鄂皖路桥投资有限公司网站建设
  • 公司网站建设设计服务wordpress mdtf