Files
mes-ui-d2/docs/zh/sys-ajax
liyang c0d0527f30 http 错误
Former-commit-id: 2dd211d2d907008d183137f70427aa9e09911d3a [formerly 2dd211d2d907008d183137f70427aa9e09911d3a [formerly 2dd211d2d907008d183137f70427aa9e09911d3a [formerly 2dd211d2d907008d183137f70427aa9e09911d3a [formerly 3513cac69ee4f88639864b6948d2cc92fa905d12 [formerly 9d47a62c0bf21043a3a033ca2986dd7e0e498fde]]]]]
Former-commit-id: 19f33fa3135a4dee8c26877c4c2f0806d3bb12f9
Former-commit-id: 8817aeb5ff39ee8e0f1c0c6bc4e99e15be719d14
Former-commit-id: 4a03ffc59182705c1e32cc39a3b58bd4f99cab3f [formerly c3df7a16c661750c70f9d958b77e41859741cef2]
Former-commit-id: 507e7b5131fd2c7ebb015e2da0c0ed38699b7aaa
Former-commit-id: a3d6f974fee73c06f92f4bc834f21f4b844cc370
Former-commit-id: 10afc53093bf44b398b5f8f7560b9b9cd231d05e
Former-commit-id: 4707b2df138c81c69c09dae73ab0f16c429336de
Former-commit-id: 8fdd5a268b3fb3150b8ac9b50e9c507c2bc2c07e
2018-08-27 13:47:11 +08:00
..
2018-08-27 13:47:11 +08:00

sidebar
sidebar
auto

异步请求

D2Admin 使用 axios 作为异步请求工具,并做了一些封装。

axios 地址
Github https://github.com/axios/axios
npm https://www.npmjs.com/package/axios
中文文档 https://www.kancloud.cn/yunye/axios/234845

介绍

Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。

  • 支持浏览器和node.js
  • 支持promise
  • 能拦截请求和响应
  • 能转换请求和响应数据
  • 能取消请求
  • 自动转换JSON数据
  • 浏览器端支持防止CSRF(跨站请求伪造)

浏览器支持

Chrome Firefox Safari Opera Edge IE
Latest ✔ Latest ✔ Latest ✔ Latest ✔ Latest ✔ 11 ✔

Browser Matrix

使用方式

axios 默认的使用方式在这里不做介绍D2Admin 推荐在您的项目中使用下面的方式获取数据:

设置接口地址

默认的请求地址在 d2-admin/.env

VUE_APP_API=/api/

上述设置将在您访问 /demo/a 时实际去访问 /api/demo/a

区分不同环境设置接口地址

如果您希望不同的环境使用不同的请求地址,可以在 d2-admin/.env.development 中添加设置(示例):

VUE_APP_API=/api-dev/

这样您在开发环境和正式环境就有了不同的公共请求地址,在开发环境访问 /demo/a 时实际去访问 /api-dev/demo/a

通用配置

您在开始使用 D2Admin 开发您的项目之前,应该首先修改 d2-admin/src/plugin/axios/index.js 下的设置。

默认的设置需要遵循下面的数据返回格式约定:

{
  // 和后台约定的状态码
  code: 0,
  // 后台返回请求状态信息
  msg: '返回信息',
  // data 内才是真正的返回数据
  data: {
    list: [
      ...
    ]
  }
}

在响应拦截器中处理完数据后将会返回:

{
  list: [
    ...
  ]
}

业务错误

当发生错误时返回的数据示例:

{
  // 和后台约定的状态码
  code: 'unlogin',
  // 后台返回请求状态信息
  msg: '用户没有登录'
}

如果针对某个错误指定处理方法,应该在响应拦截器中加入对应的代码:

service.interceptors.response.use(
  response => {
    // 成功返回数据,在这里判断和后台约定的状态标识
  }
)

http 错误

如果需要针对某个 http 错误指定处理方法,应该在响应拦截器中第二个参数中添加对应的代码。

service.interceptors.response.use(
  response => {},
  error => {
    // 发生 http 错误,在这里判断状态码
  }
)

不返回 code

在默认的设置中,如果您的接口没有返回 code 字段,将不会进行状态(非 http 状态,而是和后台约定好的状态类型)判断,直接返回 axios 请求返回的数据。

例如接口返回如下数据:

{
  list: [
    ...
  ]
}

在响应拦截器中判断该接口没有返回 code 字段,将会直接将返回:

{
  list: [
    ...
  ]
}

设计 API

假设您有一个返回数据的 API 接口,想访问它,您首先应该在 d2-admin/src/api 文件夹内创建合适的文件目录,例如:d2-admin/src/api/demo/business/table/1/index.js,这个文件中应该导出一个或者多个请求:

import request from '@/plugin/axios'

export function BusinessTable1List (data) {
  return request({
    url: '/demo/business/table/1',
    method: 'post',
    data
  })
}

使用 API 获取数据

在上面的步骤中创建了 API 文件,您应该在页面中这样使用:

<script>
import { BusinessTable1List } from '@/api/demo/business/table/1'
export default {
  methods: {
    handleSubmit (form) {
      BusinessTable1List({
        name: ''
      })
        .then(res => {
          // 返回数据
        })
        .catch(err => {
          // 异常情况
        })
    }
  }
}
</script>

而不是在页面中直接调用 axios。

::: tip 虽然没有强制规定,请注意您的 API 文件夹结构规律性 :::