uniapp 发起网络请求
推荐下我写的uni-http
- 创建
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),
}
- 在
main.js中导入
import './http-config';
manifest.json配置代理
{
...
"h5": {
"router": {
"mode": "hash"
},
"devServer": {
"https": false,
"proxy": {
"/api": {
"target": "http://xxx.com",
"changeOrigin": true,
"secure": false,
"pathRewrite": {
"^/api": "/"
}
}
}
}
}
}
- 使用
// http://xxx.com/getvideo
this.request({
url: '/getvideo',
success: res => {
// ...
}
});
也可以看看:
uniapp 发起网络请求的更多相关文章
- uni-app之网络请求
uni-app之网络请求 一,介绍 uni.request(OBJECT),发起网络请求,以下主要是一些特殊的参数说明,详细的可查看uni-app官网. 1,method的有效值必须是大写,默认GET ...
- android4.0 HttpClient 以后不能在主线程发起网络请求
android4.0以后不能在主线程发起网络请求,该异步网络请求. new Thread(new Runnable() { @Override public void run() { // TODO ...
- iOS swift HandyJSON组合Alamofire发起网络请求并转换成模型
在swift开发中,发起网络请求大部分开发者应该都是使用Alamofire发起的网络请求,至于请求完成后JSON解析这一块有很多解决方案,我们今天这里使用HandyJSON来解析请求返回的数据并转化成 ...
- 使用axios优雅的发起网络请求
原文链接:https://www.jianshu.com/p/73585303fdc0 公司项目使用了vue作为技术栈,便理所应当地使用了官方推荐的axios进行网络请求,这里记录下axios的封装方 ...
- 木马——本质就是cs socket远程控制,反弹木马是作为c端向外发起网络请求
摘自:http://kczxsp.hnu.edu.cn/upload/20150504165623705.pdf 里面对于木马的实验过程写得非常清楚,值得一看. 木马是隐藏在正常程序中的具有特殊功 ...
- 小程序uni-app发起网络异步请求
// uni.request({ // url: 'api/boxs/search', // // 使用监听函数防止this指向改变 // success: res => { // // 判断是 ...
- vue 如何发起网络请求 之 axios
1 1 2 3 4 5 6 7 8 9 10 // axios 请求 在main.js里边写入 import Axios from 'axios' // 配置请求信息 var $http = ...
- thinkphp发起网络请求
常规做法使用CURL方法: private function http_request($url,$data = null,$headers=array()){ $curl = curl_init() ...
- uni-app 网络请求
uni.request发起网络请求 url 开发者服务器接口地址 data 请求的参数 header method dataType responseType 设置响应的数据类型 statusCode ...
随机推荐
- Java多线程--两种实现方式
进程概述: 在这之前,有必要了解一下什么是进程? 在一个操作系统中,每个独立的执行的程序都可称为一个进程,也就是"正在运行的程序".如图所示: 线程概述: 如上所述,每个运行的程序 ...
- Okio Okio源码分析
概述 Okio 作为 Okhttp 底层 io 库,它补充了 java.io 和 java.nio 的不足,使访问.存储和处理数据更加容易.Okio 的特点如下: okio 是一个由 square 公 ...
- 我的刷题单(8/37)(dalao珂来享受切题的快感
P2324 [SCOI2005]骑士精神 CF724B Batch Sort CF460C Present CF482A Diverse Permutation CF425A Sereja and S ...
- Kubernetes --(k8s)volume 数据管理
容器的磁盘的生命周期是短暂的,这就带来了许多问题:第一:当一个容器损坏了,kubelet会重启这个容器,但是数据会随着container的死亡而丢失:第二:当很多容器在同一Pod中运行的时候,经常需要 ...
- IP路由__距离矢量路由选择协议
矢量路由选择协议 1.距离矢量路由选择算法发送完整的路由选择表到相邻的路由器,然后,相邻的路由器会将接收到的路由表项与自己原有的路由表进行组合,以完善路由器的路由表. 由于路由器接收到的更新只是来自相 ...
- sql如何查询数据库最后10条记录并正序输出
select * from (select * from 表名 order by 字段 desc limit 10) 临时表 order by 字段
- Flink-v1.12官方网站翻译-P011-Concepts-Overview
概念-概览 实践培训解释了作为Flink的API基础的有状态和及时流处理的基本概念,并提供了这些机制如何在应用中使用的例子.有状态的流处理是在数据管道和ETL的背景下介绍的,并在容错部分进一步发展.在 ...
- springboot源码解析-管中窥豹系列之web服务器(七)
一.前言 Springboot源码解析是一件大工程,逐行逐句的去研究代码,会很枯燥,也不容易坚持下去. 我们不追求大而全,而是试着每次去研究一个小知识点,最终聚沙成塔,这就是我们的springboot ...
- 封装Vue Element的可编辑table表格组件
前一段时间,有博友在我那篇封装Vue Element的table表格组件的博文下边留言说有没有那种"表格行内编辑"的封装组件,我当时说我没有封装过这样的组件,因为一直以来在实际开发 ...
- Codeforces Round #647 (Div. 2) B. Johnny and His Hobbies(枚举)
题目链接:https://codeforces.com/contest/1362/problem/B 题意 有一个大小及元素值均不超过 $1024$ 的正整数集合,求最小正整数 $k$,使得集合中的每 ...