Pārlūkot izejas kodu

api config global

Zhengxiaowei 5 gadi atpakaļ
vecāks
revīzija
8954fa60c0
6 mainītis faili ar 124 papildinājumiem un 5 dzēšanām
  1. 1 1
      src/api/config.js
  2. 25 2
      src/api/fly.js
  3. 1 1
      src/api/index.js
  4. 91 0
      src/api/utils.js
  5. 5 0
      src/views/Home/index.ux
  6. 1 1
      src/views/Index/index.ux

+ 1 - 1
src/api/config.js

@@ -6,7 +6,7 @@
  * @Description: api配置文件
  */
 const apiConfig = {
-  baseURL: "http://m.pre.ycsd.cn/api"
+  baseURL: "https://kyy.aizhuishu.com/api"
 };
 
 export default apiConfig;

+ 25 - 2
src/api/fly.js

@@ -8,15 +8,38 @@
 import fetch from "@system.fetch";
 import Fly from "flyio/dist/npm/hap";
 import apiConfig from "./config";
+import { getToken, clearToken } from "./utils";
 
 var fly = new Fly(fetch);
 
 fly.config.baseURL = apiConfig.baseURL;
+fly.config.headers["Content-Type"] = "application/x-www-form-urlencoded;charset=utf-8";
+
+const filterNoToken = ["/login"]
+
+fly.interceptors.request.use(async config => {
+  // 过滤一些不需要登录的路由
+  if (filterNoToken.indexOf(config.url) === -1) {
+    let token = await getToken();
+    if (config.headers) config.headers.Authorization = token;
+    else config.headers = { Authorization: token };
+    return config;
+  } else return config;
+})
 
 fly.interceptors.response.use(
   res => {
-    if (res.data.code === 0) return res.data.data;
-    return Promise.reject(res.data);
+    if (!res.data.code) {
+      return res.data.data
+    } else if (res.data.code === 10023) {
+      // token失效
+      clearToken();
+      return getToken().then(token => {
+        return r(res.config)
+      })
+    } else {
+      return Promise.reject(res)
+    }
   },
   err => {
     return Promise.reject(err);

+ 1 - 1
src/api/index.js

@@ -7,5 +7,5 @@
  */
 import fly from "./fly";
 export const demoApi = () => {
-  return fly.get("/home/index");
+  return fly.get("/books/male/index");
 };

+ 91 - 0
src/api/utils.js

@@ -0,0 +1,91 @@
+import fly from "./fly";
+import qs from "qs";
+import storage from '@system.storage';
+import device from '@system.device';
+
+// 获取token
+let token = null;
+export const getToken = async () => {
+  if (getToken.promise) return getToken.promise
+
+  if (!token) token = (await storage.get({ key: "token" })).data;
+
+  // token格式化
+  if (token) token = JSON.parse(token);
+
+  if (!token) getToken.promise = login();
+  else if (checkToken(token)) return Promise.resolve(token.token);
+  else {
+    getToken.promise = refreshToken().catch(e => {
+      return login();
+    });
+  }
+
+  getToken.promise = getToken.promise.finally(() => {
+    getToken.promise = null;
+  }).then(r => {
+    return setToken(r);
+  })
+
+  return getToken.promise;
+}
+
+// 登录
+export const login = async () => {
+  console.log("begin login");
+  let device_no = (await device.getUserId()).data.userId;
+  let device_info = (await device.getInfo()).data;
+  let data = qs.stringify({
+    device_no: device_no,
+    device_info: device_info
+  });
+  let ret = await fly.post("/login", data);
+  console.log("login over");
+  return ret;
+}
+
+// 检测数据结果
+export const checkResult = (r) => {
+  if (!r.data.code) {
+    return r.data.data;
+  } else {
+    return Promise.reject(r)
+  }
+}
+
+// 刷新token
+const refreshToken = () => {
+  return fly.get("/RefreshToken", {
+    token: token.token
+  }).then(r => {
+    return checkResult(r)
+  }).catch(e => {
+    console.error('刷新token失败')
+    return Promise.reject(e)
+  })
+}
+
+// 检查token的有效期
+const checkToken = (t) => {
+  return new Date() < t.time
+}
+
+// 设置token
+const setToken = async (t) => {
+  token = formatToken(t);
+  await storage.set({ key: "token", value: token });
+  return t.token;
+}
+
+// 清除token
+export const clearToken = async () => {
+  token = null
+  await storage.delete({ key: 'token' })
+}
+
+// 处理token的格式
+const formatToken = (t) => {
+  t.token = 'Bearer ' + t.token
+  t.time = t.time * 1000 - 5 * 1000 * 60
+  return t
+}

+ 5 - 0
src/views/Home/index.ux

@@ -99,6 +99,8 @@
 
 
 <script>
+import { demoApi } from "../../api";
+
 export default {
   props: {},
   data() {
@@ -119,6 +121,9 @@ export default {
     }
   },
   onInit() {
+    demoApi().then(r => {
+      console.log(r);
+    })
   },
   typeChange(index) {
     this.current = index;

+ 1 - 1
src/views/Index/index.ux

@@ -65,7 +65,7 @@ export default {
         index: 3
       }
     ],
-    current: 2,
+    current: 0,
     showPopup: false
   },
   onBackPress() {