request.js 处理的脏活

这是底层请求处理函数(utils.js): 

import fetch from 'dva/fetch'
import { notification } from 'antd'

import store from '../index'
import { getCookie, removeCookie } from './cookie'

// 检查ajax返回的状态
function checkStatus(res) {
  if (res.status >= 200 && res.status < 300) {
    return res
  }
  throw new Error(res.statusText)
}

// fetch超时处理
const TIMEOUT = 20000
const timeoutFetch = (url, options) => {
  let fetchPromise = fetch(url, options)
  let timeoutPromise = new Promise((resolve, reject) => {
    setTimeout(() => reject(new Error('请求超时')), TIMEOUT)
  })
  return Promise.race([fetchPromise, timeoutPromise])
}

/**
 * 请求url,返回promise 对象
 *
 * @param  {string} url       The URL we want to request
 * @param  {object} [options] The options we want to pass to "fetch"
 * @return {object}           An object containing either "data" or "err"
 */
export default function request(url, options) {
  const defaultOptions = {
    // credentials: 'include',
    method: 'GET',
    mode: 'cors',
  }
  const mergeOptions = { ...defaultOptions, ...options }
  const token = getCookie('token') || ''

  if (mergeOptions.method === 'POST' || mergeOptions.method === 'PUT') {
    mergeOptions.headers = {
      accept: 'application/json',
      'content-type': 'application/json; charset=utf-8',
      ...mergeOptions.headers,
    }
    if (token) mergeOptions.headers.Access_token = token
    mergeOptions.body = JSON.stringify(mergeOptions.body)
  }

  return timeoutFetch(url, mergeOptions)
    .then(checkStatus)
    .then((response) => {
      return (mergeOptions.method === 'DELETE' || response.status === 204) ? response.text() : response.json()
    })
    .then((data) => {
      if (data.ret_code === '000000' || data.success === 1) {
        return data
      } else if (data.ret_code === 6666) {        // token失效
        const { dispatch } = store
        removeCookie('token')
        window.localStorage.clear()
        dispatch({ type: 'app/updateState', payload: { user: {}, menu: [], breadList: [], navOpenKeys: [] } })
        dispatch({ type: 'app/fetchMenu' })
        notification.error({ message: 'token错误', description: data.ret_msg })
      } else {
        notification.error({ message: '请求错误', description: data.success ? '极验验证错误' : data.ret_msg })
      }
    })
    .catch((error) => {
      notification.error({ message: '服务器错误', description: error.message })
    })
}

这是调用请求的函数:

import { request, config } from 'utils'

const { baseUrl } = config

// 查询岗位列表列表
export async function postListAction(params) {
  return request(`${baseUrl}/employee/post/list`, {
    method: 'POST',
    body: params,
  })
}

// 查询员工列表
export async function employeeListAction(params) {
  return request(`${baseUrl}/employee/list`, {
    method: 'POST',
    body: params,
  })
}

// 员工离职
export async function dimissionEmployeeAction(params) {
  return request(`${baseUrl}/employee/dimission`, {
    method: 'POST',
    body: params,
  })
}

// 员工详情
export async function employeeDetailAction(params) {
  return request(`${baseUrl}/employee/detail`, {
    method: 'POST',
    body: params,
  })
}

// 新增员工
export async function mergeEmployeeAction(params) {
  return request(`${baseUrl}/employee/merge`, {
    method: 'POST',
    body: params,
  })
}

/** 查询所有的角色岗位 */
export async function queryAllPostRolesAction(params) {
  return request(`${baseUrl}/employee/all_post_roles`, {
    method: 'POST',
    body: params,
  })
}
/* **********************************************
 * 角色管理                                      |
************************************************/
export async function mergeRoleAction(params) { // 保存角色名称
  return request(`${baseUrl}/employee/role/merge`, {
    method: 'POST',
    body: params,
  })
}
export async function getRolePermissionAction(params) { // 获取角色所拥有的权限
  return request(`${baseUrl}/employee/role_permission`, {
    method: 'POST',
    body: params,
  })
}
export async function mergeRolePermissionAction(params) { // 保存角色权限
  return request(`${baseUrl}/employee/merge_permission`, {
    method: 'POST',
    body: params,
  })
}
export async function deleteRoleAction(params) { // 删除角色以及权限
  return request(`${baseUrl}/employee/delete_role`, {
    method: 'POST',
    body: params,
  })
}

猜你喜欢

转载自blog.csdn.net/hzxOnlineOk/article/details/89140474
今日推荐