UNPKG

@ovine/init

Version:

Apply ovine template more easily.

89 lines (71 loc) 2.2 kB
/** * 应用内请求模块 * --- * 以下 ovine demo api 一种实现方式,具体请根据项目进行修改 * 请求模块: https://ovine.igroupes.com/org/docs/modules/request */ import { get } from 'lodash' import logger from '@core/utils/logger' import { Request } from '@core/utils/request' import { getStore } from '@core/utils/store' import { apis } from './common/apis' import { storeKeys } from './constants' import { logout } from './user' // 日志模块 https://ovine.igroupes.com/org/docs/modules/logger const log = logger.getLogger('app:request') export const request = new Request() // 请求准备阶段 回调 request.onPreRequest = (option) => { option.mock = true // 全局控制是否开启 mock, 必须在 ovine cli --mock 选项开启的情况下,才有效 return option } // 请求发送前 回调 request.onRequest = (option) => { const { key, token } = getStore(storeKeys.auth) || {} const { actionAddr } = option // 开启携带 cookies 信息 option.fetchOptions.credentials = 'include' // demo api 携带用户鉴权信息,具体鉴权需自行实现 if (key) { option.headers[key] = token } // 操作地址 if (actionAddr) { option.headers['X-ACTION-ADDR'] = actionAddr } return option } // 接收到请求正常结果 回调 request.onSuccess = (source, option) => { const { code = 0, msg, message } = source const { api } = option // 退出接口,不处理 if (api !== apis.selfLogout.url) { // token 异常 code 处理 if (code === 10023 || code === 10022) { logout({ tip: '当前用户登录过期,请重新登录', }) } } // demo api 对 amis 整体接口适配 const apiSource = { ...source, status: code, msg: msg || message, } // demo api 对 amis curd 接口适配 if (get(apiSource, 'data.list')) { const { list, count, ...restList } = apiSource.data apiSource.data = { ...restList, total: count || 0, items: list, } } return apiSource } // 请求发送错误错误 回调 request.onError = (response, option, error) => { log.warn('请求发送出现错误', { response, option }, error) }