Browse Source

[新增] 封装请求

master
LAPTOP-D7TKRI82\邓 5 years ago
parent
commit
a8256919f6
  1. 1
      common/SparkMD5.js
  2. 8
      common/api.js
  3. 32
      common/http.interceptor.js
  4. 86
      common/http.js
  5. 9
      common/sha1.min.js
  6. 14
      main.js
  7. 4
      pages/index/index.vue

1
common/SparkMD5.js
File diff suppressed because it is too large
View File

8
common/api.js

@ -0,0 +1,8 @@
// appId: 正式 null | 测试 wxb35ef055a4dd8ad4
export const DEV = "dev"; // dev 测试 | prod 正式
export const VERSION = '1.0.0'; // 版本号
export const DEVURL = 'http://192.168.3.8:8000'; // 测试服请求地址
export const PRODURL = ''; // 正式服请求地址
/* 首页相关接口 */
export const API_GOODS_LIST = '/api/goods/list'; // 首页-分类下商品列表

32
common/http.interceptor.js

@ -0,0 +1,32 @@
const install = (Vue, vm) => {
// 请求全局配置
Vue.prototype.$u.http.setConfig({
baseUrl: vm.API.DEVURL,
method: 'POST',
dataType: 'json', // 返回数据时自动 JSON.parse()
showLoading: true, // 是否显示请求中的loading
loadingText: '正在加载',
loadingTime: 800 // 延迟800毫秒时显示加载框
});
// 请求前拦截
Vue.prototype.$u.http.interceptor.request = config => {
return true;
};
// 响应拦截
Vue.prototype.$u.http.interceptor.response = res => {
if(res.code == 200) {
return res.result;
} else if(res.code == 201) {
console.log("其他状态:", res.code)
return false;
} else {
return false;
}
}
}
export default {
install
}

86
common/http.js

@ -0,0 +1,86 @@
let sha1 = require("./sha1.min.js");
let SparkMD5 = require("./SparkMD5.js"); // 签名加密js文件
function getsign(params) {
let s_data = "";
let keys = [];
for (const key in params) {
if (params.hasOwnProperty(key)) {
const value = params[key];
keys.push(key);
}
}
let arr = [];
keys.sort();
for (let i = 0; i < keys.length; i++) {
let k = keys[i];
let v = params[k];
arr.push(k + '=' + v);
}
s_data = arr.join('&');
let sign = sha1(SparkMD5.hash(s_data) + 'lanzu@123');
params.sign = sign;
return params;
}
// TODO this获取
function $http(url, data = {}){
return new Promise((resolve, reject) => {
// 绑定this
let that = this;
// 获取当前请求来自哪个页面
let pages = getCurrentPages();
data.create_page = pages[pages.length - 1].route;
// 当前请求时间戳
if (!data.timestamp) {
data.timestamp = Math.round(new Date().getTime() / 1000);
}
// 当前请求随机数
if(!data.rand){
data.rand = Math.round(Math.random() * 1000000);
}
// 当前请求来自的平台 TODO 动态赋值
data.platform = 'wxmini';
// 当前小程序版本号 TODO 实时获取
data.version = '1.0.0';
// 获取设备唯一deviceId,如果没有,自动生成一个
let sysInfo = uni.getSystemInfoSync();
if(typeof sysInfo.deviceId == 'undefined'){
let deviceId = uni.getStorageSync('deviceId');
if(deviceId){
sysInfo.deviceId = deviceId;
}else{
let date_time = String(new Date().getTime());
let md5_deviceId = SparkMD5.hash(date_time);
uni.setStorageSync('deviceId', md5_deviceId);
sysInfo.deviceId = md5_deviceId;
}
}
if (sysInfo) {
data.device_info = JSON.stringify(sysInfo);
}
// 获取页面options参数
let _mergeParam = that._mergeParam;
for (let _keyVar in _mergeParam) {
let _k = _keyVar
if (data[_k]) {
_k = '_' + _k;
}
data[_k] = _mergeParam[_keyVar];
}
// 生成sign
getsign(data);
console.log(url, data);
// 发起请求
that.$u.post(url, data).then(res => {
resolve(res);
}).catch(err => {
reject(err);
})
});
}
module.exports = {
$http
}

9
common/sha1.min.js
File diff suppressed because it is too large
View File

14
main.js

@ -1,14 +1,21 @@
import Vue from 'vue'
import App from './App'
import * as API from '@/common/api.js';
Vue.config.productionTip = false
App.mpType = 'app'
// 将API注入全局
Vue.prototype.API = API;
// 引入全局uView
import uView from 'uview-ui'
Vue.use(uView);
import { $http } from '@/common/http.js';
Vue.prototype.$http = $http;
//color-ui-标题组件
import cuCustom from './colorui/components/cu-custom.vue'
Vue.component('cu-custom', cuCustom)
@ -47,4 +54,9 @@ Vue.prototype.$routerGo = (obj) => {
const app = new Vue({
...App
})
app.$mount()
// 引入http拦截器
import httpInterceptor from '@/common/http.interceptor.js'
Vue.use(httpInterceptor, app);
app.$mount();

4
pages/index/index.vue

@ -76,7 +76,9 @@
}
},
onLoad() {
this.$http(this.API.API_GOODS_LIST, {data: 1}).then(res => {
console.log(res);
}).catch(err => err);
},
methods: {
change(index) {

Loading…
Cancel
Save