推荐下我写的uni-http

  1. 创建http-config.js
import Vue from 'vue'

const BASE_URL = 'http://xxx.com';

if (process.env.NODE_ENV === 'development') {

  // #ifdef H5
Vue.prototype.apiUrl = '';
// #endif // #ifndef H5
Vue.prototype.apiUrl = BASE_URL;
// #endif } else {
Vue.prototype.apiUrl = BASE_URL;
} function setDefaultObj(options) { // default show loading icon
if (options.loading === undefined) {
options.loading = true;
} // default method is get
if (!options.method) options.method = 'GET' // send formdata 发送文件不能写
if (options.formData && !options.datafilePath) {
options.header = {
...options.header,
'Content-Type': 'application/x-www-form-urlencoded'
}
} // deault data
if (!options.data) options.data = {} // token data
if (!options.data.token) {
// options.data.token = uni.getStorageSync('token') || '';
} // params
if (options.params && Object.prototype.toString.call(options.params) === '[object Object]') {
const paramsString = _jsonToSerialize(options.params);
const s = options.url.indexOf('?') <= 0 ? '?' : '&';
options.url += s + paramsString;
}
} Vue.prototype.request = function(options) {
let _res, _rej;
let _promise = new Promise((res, rej) => {
_res = res;
_rej = rej;
}); setDefaultObj(options);
if (options.loading) {
uni.showLoading({
title: '加载中'
});
} let url = options.url;
if (!options.url.match(/^https?:\/\//)) {
url = _join(this.apiUrl, options.url);
} if (options.filePath) {
// 传文件
// https://www.kancloud.cn/guobaoguo/uni-app/821793
const uploadTask = uni.uploadFile({
url: url,
filePath: options.filePath,
name: options.name,
formData: options.data,
header: options.header,
success: res => {
if (options.loading) uni.hideLoading();
const data = JSON.parse(res.data);
if (typeof options.success == "function")
options.success(data);
_res(data);
},
fail: res => {
if (options.loading) uni.hideLoading();
const data = { ...res,
data: JSON.parse(res.data)
};
if (typeof options.fail == "function") options.fail(data);
_rej(data);
}
});
} else {
uni.request({
url: url,
data: options.data,
method: options.method,
header: options.header,
success: res => {
if (options.loading) uni.hideLoading();
if (typeof options.success == "function") options.success(res.data);
_res(res.data);
},
fail: res => {
if (options.loading) uni.hideLoading();
if (typeof options.fail == "function") options.fail(res);
_rej(res)
}
});
}
return _promise;
} Vue.prototype.postHttp = function(options) {
return this.request({
...options,
method: 'POST',
formData: options.formData === false || options.filePath ? false : true,
});
} function _join(a_url, b_url) {
return a_url.replace(/\/+$/, "") + "/" + b_url.replace(/^\/+/, "")
} function _jsonToSerialize(o) {
let s = '';
for (let k in o) {
let v = o[k];
let vTag = Object.prototype.toString.call(v);
if (vTag === '[object Array]') {
for (let i of v) {
s += `${k}=${encodeURIComponent(i)}&`
}
} else if (vTag === '[object Object]') {
s += `${k}=${encodeURIComponent(JSON.stringify(v))}&`
} else {
s += `${k}=${encodeURIComponent(v)}&`
}
}
return s.replace(/&$/, '');
} export default {
BASE_URL: BASE_URL,
apiUrl: Vue.prototype.apiUrl,
request: Vue.prototype.request.bind(Vue.prototype),
postHttp: Vue.prototype.postHttp.bind(Vue.prototype),
}
  1. main.js中导入
import './http-config';
  1. manifest.json配置代理
{
... "h5": {
"router": {
"mode": "hash"
},
"devServer": {
"https": false,
"proxy": {
"/api": {
"target": "http://xxx.com",
"changeOrigin": true,
"secure": false,
"pathRewrite": {
"^/api": "/"
}
}
}
}
} }
  1. 使用
    // http://xxx.com/getvideo
this.request({
url: '/getvideo',
success: res => {
// ...
}
});

也可以看看:

uniapp 发起网络请求的更多相关文章

  1. uni-app之网络请求

    uni-app之网络请求 一,介绍 uni.request(OBJECT),发起网络请求,以下主要是一些特殊的参数说明,详细的可查看uni-app官网. 1,method的有效值必须是大写,默认GET ...

  2. android4.0 HttpClient 以后不能在主线程发起网络请求

    android4.0以后不能在主线程发起网络请求,该异步网络请求. new Thread(new Runnable() { @Override public void run() { // TODO ...

  3. iOS swift HandyJSON组合Alamofire发起网络请求并转换成模型

    在swift开发中,发起网络请求大部分开发者应该都是使用Alamofire发起的网络请求,至于请求完成后JSON解析这一块有很多解决方案,我们今天这里使用HandyJSON来解析请求返回的数据并转化成 ...

  4. 使用axios优雅的发起网络请求

    原文链接:https://www.jianshu.com/p/73585303fdc0 公司项目使用了vue作为技术栈,便理所应当地使用了官方推荐的axios进行网络请求,这里记录下axios的封装方 ...

  5. 木马——本质就是cs socket远程控制,反弹木马是作为c端向外发起网络请求

    摘自:http://kczxsp.hnu.edu.cn/upload/20150504165623705.pdf 里面对于木马的实验过程写得非常清楚,值得一看.   木马是隐藏在正常程序中的具有特殊功 ...

  6. 小程序uni-app发起网络异步请求

    // uni.request({ // url: 'api/boxs/search', // // 使用监听函数防止this指向改变 // success: res => { // // 判断是 ...

  7. vue 如何发起网络请求 之 axios

    1   1 2 3 4 5 6 7 8 9 10 // axios 请求  在main.js里边写入 import Axios from 'axios'   // 配置请求信息 var $http = ...

  8. thinkphp发起网络请求

    常规做法使用CURL方法: private function http_request($url,$data = null,$headers=array()){ $curl = curl_init() ...

  9. uni-app 网络请求

    uni.request发起网络请求 url 开发者服务器接口地址 data 请求的参数 header method dataType responseType 设置响应的数据类型 statusCode ...

随机推荐

  1. SSH入门开发(实现一个简单的登录功能)详解

    开头,首先想记录下一首诗,是今天拇指阅读看到的:很有感触,所以乐于分享: 那么,下面正式开始进入正题,搭建一个 SSH完整的项目: 首先,我们需要在WEB-ROOT下创建一个login.jsp(登录) ...

  2. Java方式导出EXCEL表格

    最近几天做公司项目,应客户需求需要将表单的数据下载本地存成.xls文件.之前做毕设的时候,就有类似这方面的功能需 求,但是当时也没有做就搁浅了下来,这次补上. 一.业务开发描述 二.前台jsp页面及j ...

  3. java判断是否为整数

    /** * 判断是否为整数 * * @param str 传入的字符串 * @return 是整数返回true,否则返回false */ public static boolean isInteger ...

  4. Nestjs 路程 之 异常过滤器Exceptionfilter

    参考文档:docs.nestjs.cn 说起Nestjs的异常过滤器,不能不提.Net的全局过滤器Filter,功能那是相当的强悍,用理论话说叫AOP 面向切面编程,可谓方便了太多需要异常处理的场景. ...

  5. Trap HDU - 6569 二分

    题意: 给你n个边长ai,你需要挑出来4个边使得它们可以构成等腰梯形.问你能构成多少种不同的等腰梯形 题解: 我们首先处理一下边长为x的且这个边长出现大于等于2次的边,因为等腰梯形需要两条相等的边 然 ...

  6. Codeforces Round #555 (Div. 3) C2. Increasing Subsequence (hard version) (贪心)

    题意:给你一组数,每次可以选队首或队尾的数放入栈中,栈中元素必须保持严格单增,问栈中最多能有多少元素,并输出选择情况. 题解:首先考虑队首和队尾元素不相等的情况,如果两个数都大于栈顶元素,那么我们选小 ...

  7. Network of Schools POJ - 1236 有向强连通图

    //题意://给你n个学校,其中每一个学校都和一些其他学校有交流,但是这些边都是单向的.你至少需要给几个学校//传递消息可以使全部学校都收到消息,第二问你最少添加几条边可以使它变成一个强连通图//题解 ...

  8. c语言中qsort函数的使用、编程中的一些错误

    qsort()函数: 功能:相当于c++sort,具有快排的功能,复杂度的话nlog(n)注:C中的qsort()采用的是快排算法,C++的sort()则是改进的快排算法.两者的时间复杂度都是nlog ...

  9. Nestjs入门学习教程

    初次接触Nest,有问题欢迎指出: 简介 NestJS是一个用于构建高效.可扩展的Node.js服务器端应用程序的开发框架.简单来说是一款Node.js的后端框架. 它利用JavaScript的渐进增 ...

  10. Filebeat 日志收集

    Filebeat 介绍 Filebeat 安装 # 上传代码包 [root@redis03 ~]# rz filebeat-6.6.0-x86_64.rpm # 安装 [root@redis03 ~] ...