├── servers ├── servers.js ├── config.js ├── utils.js ├── baseUrl.js ├── interceptors.js └── http.js └── README.md /servers/servers.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable import/prefer-default-export */ 2 | import HTTPREQUEST from "./http" 3 | 4 | export const getResultData_servers = (postData) => { 5 | return HTTPREQUEST.post('/api/white-screen/search', postData) 6 | } 7 | -------------------------------------------------------------------------------- /servers/config.js: -------------------------------------------------------------------------------- 1 | export const HTTP_STATUS = { 2 | SUCCESS: 200, 3 | CREATED: 201, 4 | ACCEPTED: 202, 5 | CLIENT_ERROR: 400, 6 | AUTHENTICATE: 401, 7 | FORBIDDEN: 403, 8 | NOT_FOUND: 404, 9 | SERVER_ERROR: 500, 10 | BAD_GATEWAY: 502, 11 | SERVICE_UNAVAILABLE: 503, 12 | GATEWAY_TIMEOUT: 504 13 | } -------------------------------------------------------------------------------- /servers/utils.js: -------------------------------------------------------------------------------- 1 | import Taro from "@tarojs/taro"; 2 | /** 3 | * @description 获取当前页url 4 | */ 5 | export const getCurrentPageUrl = () => { 6 | let pages = Taro.getCurrentPages() 7 | let currentPage = pages[pages.length - 1] 8 | let url = currentPage.route 9 | return url 10 | } 11 | 12 | export const pageToLogin = () => { 13 | let path = getCurrentPageUrl() 14 | if (!path.includes('login')) { 15 | Taro.navigateTo({ 16 | url: "/pages/login/login" 17 | }); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /servers/baseUrl.js: -------------------------------------------------------------------------------- 1 | const getBaseUrl = (url) => { 2 | let BASE_URL = ''; 3 | if (process.env.NODE_ENV === 'development') { 4 | //开发环境 - 根据请求不同返回不同的BASE_URL 5 | if (url.includes('/api/')) { 6 | BASE_URL = '' 7 | } else if (url.includes('/iatadatabase/')) { 8 | BASE_URL = '' 9 | } 10 | } else { 11 | // 生产环境 12 | if (url.includes('/api/')) { 13 | BASE_URL = '' 14 | } else if (url.includes('/iatadatabase/')) { 15 | BASE_URL = '' 16 | } 17 | } 18 | return BASE_URL 19 | } 20 | 21 | export default getBaseUrl; 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## taro-request 2 | > 封装Taro.request(拦截器,url配置,Authorization等),如果觉得有用的话,來个star🤝。 3 | 4 | > ✅ 仅适用于taro项目 5 | 6 | ### 目录结构 7 | 8 | ```js 9 | servers 10 | ├── http.js // Taro.request处理 11 | ├── baseUrl.js // 设置不同环境不同路径请求的url地址 12 | ├── config.js // http状态配置 13 | ├── interceptors.js // 拦截器 14 | ├── servers.js // 建议所有接口请求整理在一起再按需引用 15 | └── utils.js // 页面跳转等函数封装 16 | ``` 17 | ### 组件内使用eg: 18 | 19 | ```js 20 | import { getResultData_servers } from '@src/servers/servers' 21 | 22 | getResultData_servers(params).then(res => { 23 | console.log(res) 24 | }).catch(err => { 25 | console.log(err) 26 | }) 27 | 28 | ``` 29 | 30 | ### 示例项目: 31 | * 💯[taro-init](https://github.com/TigerHee/taro-init) 32 | -------------------------------------------------------------------------------- /servers/interceptors.js: -------------------------------------------------------------------------------- 1 | import Taro from "@tarojs/taro" 2 | import { pageToLogin } from "./utils" 3 | import { HTTP_STATUS } from './config' 4 | 5 | const customInterceptor = (chain) => { 6 | 7 | const requestParams = chain.requestParams 8 | 9 | return chain.proceed(requestParams).then(res => { 10 | // 只要请求成功,不管返回什么状态码,都走这个回调 11 | if (res.statusCode === HTTP_STATUS.NOT_FOUND) { 12 | return Promise.reject("请求资源不存在") 13 | 14 | } else if (res.statusCode === HTTP_STATUS.BAD_GATEWAY) { 15 | return Promise.reject("服务端出现了问题") 16 | 17 | } else if (res.statusCode === HTTP_STATUS.FORBIDDEN) { 18 | Taro.setStorageSync("Authorization", "") 19 | pageToLogin() 20 | // TODO 根据自身业务修改 21 | return Promise.reject("没有权限访问"); 22 | 23 | } else if (res.statusCode === HTTP_STATUS.AUTHENTICATE) { 24 | Taro.setStorageSync("Authorization", "") 25 | pageToLogin() 26 | return Promise.reject("需要鉴权") 27 | 28 | } else if (res.statusCode === HTTP_STATUS.SUCCESS) { 29 | return res.data 30 | 31 | } 32 | }) 33 | } 34 | 35 | // Taro 提供了两个内置拦截器 36 | // logInterceptor - 用于打印请求的相关信息 37 | // timeoutInterceptor - 在请求超时时抛出错误。 38 | const interceptors = [customInterceptor, Taro.interceptors.logInterceptor] 39 | 40 | export default interceptors 41 | -------------------------------------------------------------------------------- /servers/http.js: -------------------------------------------------------------------------------- 1 | import Taro from '@tarojs/taro' 2 | import getBaseUrl from './baseUrl' 3 | import interceptors from './interceptors' 4 | 5 | interceptors.forEach(interceptorItem => Taro.addInterceptor(interceptorItem)) 6 | 7 | class httpRequest { 8 | 9 | baseOptions(params, method = "GET") { 10 | let { url, data } = params; 11 | const BASE_URL = getBaseUrl(url); 12 | let contentType = "application/json"; 13 | contentType = params.contentType || contentType; 14 | const option = { 15 | url: BASE_URL + url, 16 | data: data, 17 | method: method, 18 | header: { 19 | 'content-type': contentType, 20 | 'Authorization': Taro.getStorageSync('Authorization') 21 | } 22 | }; 23 | return Taro.request(option); 24 | } 25 | 26 | get(url, data = "") { 27 | let option = { url, data }; 28 | return this.baseOptions(option); 29 | } 30 | 31 | post(url, data, contentType) { 32 | let params = { url, data, contentType }; 33 | return this.baseOptions(params, "POST"); 34 | } 35 | 36 | put(url, data = "") { 37 | let option = { url, data }; 38 | return this.baseOptions(option, "PUT"); 39 | } 40 | 41 | delete(url, data = "") { 42 | let option = { url, data }; 43 | return this.baseOptions(option, "DELETE"); 44 | } 45 | 46 | } 47 | 48 | export default new httpRequest() 49 | --------------------------------------------------------------------------------