taro 请求函数封装
1.项目目录

2.代码
app/src/service/api.js
import Taro from '@tarojs/taro'
import { HTTP_STATUS } from '../const/status'
import { base } from './config'
import { logError } from '../utils' const token = '' export default {
baseOptions(params, method = 'GET') {
let { url, data } = params
// let token = getApp().globalData.token
// if (!token) login()
console.log('params', params)
let contentType = 'application/x-www-form-urlencoded'
contentType = params.contentType || contentType
const option = {
isShowLoading: false,
loadingText: '正在加载',
url: base + url,
data: data,
method: method,
header: { 'content-type': contentType, 'token': token },
success(res) {
if (res.statusCode === HTTP_STATUS.NOT_FOUND) {
return logError('api', '请求资源不存在')
} else if (res.statusCode === HTTP_STATUS.BAD_GATEWAY) {
return logError('api', '服务端出现了问题')
} else if (res.statusCode === HTTP_STATUS.FORBIDDEN) {
return logError('api', '没有权限访问')
} else if (res.statusCode === HTTP_STATUS.SUCCESS) {
return res.data
}
},
error(e) {
logError('api', '请求接口出现问题', e)
}
}
return Taro.request(option)
},
get(url, data = '') {
let option = { url, data }
return this.baseOptions(option)
},
post: function (url, data, contentType) {
let params = { url, data, contentType }
return this.baseOptions(params, 'POST')
}
}
app/src/service/config.js
// https://api.github.com/repos/NervJS/taro/issues?per_page=1&page=2 export const base = "https://api.github.com/repos/";
app/src/const/status.js
export const HTTP_STATUS = {
SUCCESS: 200,
CLIENT_ERROR: 400,
AUTHENTICATE: 401,
FORBIDDEN: 403,
NOT_FOUND: 404,
SERVER_ERROR: 500,
BAD_GATEWAY: 502,
SERVICE_UNAVAILABLE: 503,
GATEWAY_TIMEOUT: 504
}
// promise status
export const SUCCESS = { success:'success'}
export const FAIL = { fail:'fail'}
export const COMPLETE = { complete:'complete'}
export const PROMISE_STATUS = {
success: 'success',
fail: 'fail',
complete: 'complete'
}
export const RESULT_STATUS = {
SUCCESS:0,
SIGNATURE_FAILED: 1000 // 签名失败
}
app/src/utils/index.js
export const promisify = (func, ctx) => {
// 返回一个新的function
return function () {
// 初始化this作用域
var ctx = ctx || this;
// 新方法返回的promise
return new Promise((resolve, reject) => {
// 调用原来的非promise方法func,绑定作用域,传参,以及callback(callback为func的最后一个参数)
func.call(ctx, ...arguments, function () {
// 将回调函数中的的第一个参数error单独取出
var args = Array.prototype.map.call(arguments, item => item);
var err = args.shift();
// 判断是否有error
if (err) {
reject(err)
} else {
// 没有error则将后续参数resolve出来
args = args.length > 1 ? args : args[0];
resolve(args);
}
});
})
};
};
export const promiseImage = (url) => {
return new Promise(function (resolve, reject) {
resolve(url)
})
}
export const isChinese = (str) => {
if (escape(str).indexOf("%u") < 0) return false
return true
}
export const handleName = (str) => {
let res = emoj2str(str)
if (isChinese(res)) {
res = res.length > 4 ? res.slice(0, 4) + '...' : res
} else {
res = res.length > 7 ? res.slice(0, 7) + '...' : res
}
return res
}
export const emoj2str = (str) => {
return unescape(escape(str).replace(/\%uD.{3}/g, ''))
}
/*获取当前页url*/
export const getCurrentPageUrl = () => {
let pages = getCurrentPages()
let currentPage = pages[pages.length - 1]
let url = currentPage.route
return url
}
export const formatTime = date => {
const year = date.getFullYear()
const month = date.getMonth() + 1
const day = date.getDate()
const hour = date.getHours()
const minute = date.getMinutes()
const second = date.getSeconds()
return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':')
}
export const formatNumber = n => {
n = n.toString()
return n[1] ? n : '0' + n
}
export const logError = (name, action, info) => {
if (!info) {
info = 'empty'
}
try {
let deviceInfo = wx.getSystemInfoSync()
var device = JSON.stringify(deviceInfo)
} catch (e) {
console.error('not support getSystemInfoSync api', err.message)
}
let time = formatTime(new Date())
console.error(time, name, action, info, device)
// if (typeof action !== 'object') {
// fundebug.notify(name, action, info)
// }
// fundebug.notifyError(info, { name, action, device, time })
if (typeof info === 'object') {
info = JSON.stringify(info)
}
}
.
taro 请求函数封装的更多相关文章
- vue-ajax/axios请求函数封装: axios+promise
项目文件目录/src/api ajax.js /** * ajax 请求函数模块 * 返回值为promise对象 */ import axios from 'axios' export default ...
- vue-cli配置axios,并基于axios进行后台请求函数封装
文章https://www.cnblogs.com/XHappyness/p/7677153.html已经对axios配置进行了说明,后台请求时可直接this.$axios直接进行.这里的缺点是后端请 ...
- C# 后台服务器端 Get 请求函数封装
请求参数封装 /// <summary> /// 拼接 Get请求参数 /// </summary> /// <param name="parames" ...
- 微信小程序 之 请求函数封装
封装的request的代码 /** * @desc API请求接口类封装 */ /** * POST请求API * @param {String} url 接口地址 * @param {Object} ...
- uni-app中封装统一请求函数
封装统一请求函数有利于项目的维护 整体功能简单实用,但小编遇到一个巨坑,项目中在vue文件使用跳转方法,url参数输入 "/" 后工具提示的路径为 "/pages/log ...
- 关于ajax网络请求的封装
// 封装的ajax网络请求函数// obj 是一个对象function AJAX(obj){ //跨域请求 if (obj.dataType == "jsonp") ...
- 前端总结·基础篇·JS(三)arguments、callee、call、apply、bind及函数封装和构造函数
前端总结系列 前端总结·基础篇·CSS(一)布局 前端总结·基础篇·CSS(二)视觉 前端总结·基础篇·CSS(三)补充 前端总结·基础篇·JS(一)原型.原型链.构造函数和字符串(String) 前 ...
- Ajax入门(二)Ajax函数封装
如果看了的我上一篇博客<Ajax入门(一)从0开始到一次成功的GET请求>的话,肯定知道我们已经完成了一个简单的get请求函数了.如下: 1234567891011121314151617 ...
- 初步了解XMLHttpRequest对象、http请求的封装
构造器 var xhr = new XMLHttpRequest() 设置超时时间 xhr.ontimeout= 设置超时时间为 1s 设置超时时间(单位:ms) 0为永不超时 HTTP 请求的状态 ...
随机推荐
- nyoj 151 Biorhythms
描述 Some people believe that there are three cycles in a person's life that start the day he or she i ...
- JDBC 编程初步
JDBC 概述 什么是JDBC 是一种用于执行SQL语句的Java API,它由一组用Java语言编写的类和接口组成,JDBC提供了一种操作数据的标准,JDBC的目标是使Java程序员使用JDBC可以 ...
- NOIP2005 day1 t1 谁拿了最多奖学金
题目描述 某校的惯例是在每学期的期末考试之后发放奖学金.发放的奖学金共有五种,获取的条件各自不同: 1) 院士奖学金,每人8000元,期末平均成绩高于80分(>80),并且在本学期内发表1篇或1 ...
- [Luogu1979][NOIP2013]华容道(BFS+SPFA)
考虑从起点到终点的过程,一定是先将空格子移到指定格子旁边,和指定格子交换,再移到下一个指定格子要到的地方,再交换,如此反复. 于是问题分为两个部分: 1.给定两个曼哈顿距离为2的格子求最短路,BFS即 ...
- [LOJ2541]猎人杀
好题== 先转化一下,每个人被杀死后给他打标记,以后随机杀人时选到有标记的人就继续随机,这样并不会改变每个人被杀死的概率 直接算很难算,考虑容斥,我们枚举$S$表示在$1$死后才死的人至少在集合$S$ ...
- 探究Activity(1)--Activity的基本用法
一.Activity是什么 Activity(活动)是最容易吸引用户的地方,它是一种可以包含用户界面的组件,主要用于和用户进行交互.一个应用程序中应该包括零个或多个Activity. 二.Activi ...
- [bzoj1008](HNOI2008)越狱(矩阵快速幂加速递推)
Description 监狱有连续编号为1...N的N个房间,每个房间关押一个犯人,有M种宗教,每个犯人可能信仰其中一种.如果相邻房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱 In ...
- 让你的WPF程序在Win7下呈现Win8风格主题
今天在Win8下使用了一个我之前写的一个WPF程序的时候,发现现在也支持Win8效果了(记得以前的.net 4.0的版本是不支持的).由于WPF的控件是自绘的,并不受系统主题所控制,也就是说.net ...
- IOS Reachability判断所请求服务器是否超时?
开发Web等网络应用程序的时候,需要确认网络环境,连接情况等信息.如果没有处理它们,是不会通过Apple的审查的. Apple 的 例程 Reachability 中介绍了取得/检测网络状态的方法. ...
- Java8新语言特性
Java8简明指南 欢迎来到Java8简明指南.本教程将一步一步指导你通过所有新语言特性.由短而简单的代码示例,带你了解如何使用默认接口方法,lambda表达式,方法引用和可重复注解.本文的最后你会熟 ...