123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- import qs from 'qs';
- import config from '../config/index'
- import {
- getPlatform,
- objParseUrlAndParam
- } from '../utils/index'
- /**
- * 通用uni-app网络请求
- * 基于 Promise 对象实现更简单的 request 使用方式,支持请求和响应拦截
- */
- export class HttpInterface {
- constructor() {
- this.config = {
- baseUrl: config.api, // 请求域名
- header: {
- // 'Content-Type': 'application/json;charset=UTF-8',
- 'Content-Type': 'application/x-www-form-urlencoded',
- },
- data: {},
- method: 'GET',
- // dataType: 'json' /* 如设为json,会对返回的数据做一次 JSON.parse */,
- // responseType: 'text',
- success() {},
- fail() {},
- complete() {}
- }
- this.interceptor = {
- before: _config => {
- return _config
- },
- after: null
- }
- }
- request(options) {
- let that = this
- if (!options) {
- options = {}
- }
- options.baseUrl = options.baseUrl ||
- this.config.baseUrl
- //if (process.env.NODE_ENV ===
- // 'development') {
- // options.url = this.addTemp(options.baseUrl +
- // 'devapi/' + options.url) // 增加时间戳
- //} else {
- options.url = this.addTemp(options.baseUrl +
- options.url) // 增加时间戳
- //}
- options.url = this.addPlatform(
- options.url) // 增加使用平台
- options.data = qs.stringify(options.data ||
- {})
- options.method = options.method ||
- this.config.method
- if (options.method === 'get' ||
- options.method === 'GET') {
- options.url = objParseUrlAndParam(
- options.url, options.data)
- }
- // TODO 加密数据
- // TODO 数据签名
- return new Promise((resolve, reject) => {
- let _config = null
- options.complete = response => {
- let statusCode = response.statusCode
- response.config = _config
- // 请求后的拦截器
- if (this.interceptor.after) {
- let newResponse = this.interceptor
- .after(response)
- if (newResponse) {
- response = newResponse
- }
- }
- // 统一的响应日志记录
- that._reslog(response)
- if (statusCode === 200) {
- // 成功
- resolve(response.data)
- } else {
- reject({code: 0, msg: '请求出错'})
- }
- }
- _config = Object.assign({}, this.config,
- options)
- _config.requestId = new Date().getTime()
- // 请求前的拦截器
- if (this.interceptor.before) {
- let newConfig = this.interceptor
- .before(_config)
- if (newConfig) {
- _config = newConfig
- } else {
- return
- }
- }
- // 统一的请求日志记录
- that._reqlog(_config)
- uni.request(_config)
- })
- }
- get(options) {
- if (!options) {
- options = {}
- }
- options.method = 'GET'
- return this.request(options)
- }
- post(options) {
- if (!options) {
- options = {}
- }
- options.method = 'POST'
- return this.request(options)
- }
- /**
- * 统一的响应日志记录
- * @param {*} req
- */
- _reqlog(req) {
- if (process.env.NODE_ENV ===
- 'development') {
- if (req.data) {
- }
- }
- // TODO 调接口异步写入日志数据库
- }
- /**
- * 统一的请求日志记录
- * @param {*} res
- */
- _reslog(res) {
- let _statusCode = res.statusCode
- if (process.env.NODE_ENV ===
- 'development') {
- if (res.config.data) {
- }
- }
- // TODO 除了接口服务错误外,其他日志调接口异步写入日志数据库
- switch (_statusCode) {
- case 200:
- break
- case 401:
- break
- case 404:
- break
- default:
- break
- }
- }
- /**
- * 增加时间戳,用于防止请求缓存
- * @param {*} url
- */
- addTemp(url) {
- if (url.indexOf('?') === -1) {
- url =
- `${url}?_=${new Date().getTime()}`
- } else {
- url = url.replace('?',
- `?_=${new Date().getTime()}&`)
- }
- return url
- }
- /**
- * 增加使用平台信息
- * @param {*} url
- */
- addPlatform(url) {
- if (url.indexOf('?') === -1) {
- url =
- `${url}?_platform_=${getPlatform()}`
- } else {
- url = url.replace('?',
- `?_platform_=${getPlatform()}&`)
- }
- return url
- }
- }
|