ReactNative fetch网络请求封装(GET,POST,图片上传)
2018-01-22 17:15
337 查看
目录
目录1前言
2结构
3代码
4使用
5扩展
6结束语
1、前言
最近学习RN进行到了网络请求这一块,便花了点时间把网络请求封装了一下,这样使用起来也方便2、结构
Connect.js 对NetUtils的二次封装,将地址添加进来,统一管理网络请求NetAddr.js 请求地址的存放
NetUtils.js get, post,图片上传的封装
3、代码
NetUtils.js代码里都有注释export default class NetUtils{ /** * GET 请求 */ static get(url, params, success, fail, error){ if (params) { let paramsArray = []; //拼接参数 Object.keys(params).forEach(key => paramsArray.push(key + '=' + params[key])) if (url.search(/\?/) === -1) { url += '?' + paramsArray.join('&') } else { url += '&' + paramsArray.join('&') } } console.log(url, params) // fetch 请求 fetch(url,{ headers:{ //看后台需求决定配置参数,例如我们后台要求将appId放在这里请求 // appId: '1234345656' }, }) .then(response=>response.json())//把response转为json .then(responseJson=> { // 拿到上面的转好的json console.log(responseJson) // 打印返回结果 if (responseJson.code == 200){ // 200为请求成功 success && success(responseJson.data) }else { fail && fail(responseJson.msg)//可以处理返回的错误信息 } }) .catch(e=>{ console.log(e) error && error(e) }) } /** * POST 请求,经测试用FormData传递数据也可以 */ static post(url, params, success, fail, error){ console.log(url,params) fetch(url,{ method: 'POST', headers:{ 'Accept': 'application/json', //媒体格式类型key/value格式 'Content-Type': 'application/x-www-form-urlencoded', }, body: JSON.stringify(params) }) .then(response=>response.json())//把response转为json .then(responseJson=> { // 拿到上面的转好的json console.log(responseJson) // 打印返回结果 if (responseJson.code == 200){ // 200为请求成功 success && success(responseJson.data) }else { fail && fail(responseJson.msg)//可以处理返回的错误信息 } }) .catch(e=>{ console.log(e) error && error(error) }) } /** * @images uri数组 * @param FormData格式,没有参数的话传null */ static uploadFile(url,images, params, success, fail, error){ console.log(url,images) let formData = new FormData(); if (params){ formData = params; } for(var i = 0;i<images.length;i++){ var uri = images[I] var date = new Date() var name = date.getTime() + '.png'//用时间戳保证名字的唯一性 let file = {uri: uri, type: 'multipart/form-data', name: name} formData.append('file', file) } console.log(url,formData) fetch(url,{ method: 'POST', headers:{ 'Accept': 'application/json', //媒体格式类型key/value格式 'Content-Type':'multipart/form-data', customerId: customerId, appId: appId }, body: formData }) .then(response=>response.json())//把response转为json .then(responseJson=> { // 拿到上面的转好的json console.log(responseJson) // 打印返回结果 if (responseJson.code == 200){ // 200为请求成功 success && success(responseJson.data) }else { fail && fail()//可以处理返回的错误信息 } }) .catch(e=>{ console.log(e) error && error(error) }) } }
NetAddr.js
var host = 'http://192.168.0.70:8080' var NetAddr = { // 个人信息 customerInfo: host + '/Shop/CustomerInfo', // 我的订单列表 myOrderList: host + '/Shop/MyOrderList', // 上传图片 upLoadImage: host + '/Resource/UploadImage' } module.exports = NetAddr
Connect.js
import NetUtils from './NetUtils' import NetAddr from './NetAddr' export default class Connect{ /** * 个人信息接口 */ static getCustomerInfo(success){ NetUtils.get(NetAddr.customerInfo, null,response=>{ success && success(response) }) } /** * 我的订单列表 */ static postMyOrderList(params, success){ NetUtils.post(NetAddr.myOrderList, params, response=>{ success && success(response) }) } /** * 上传图片 */ static uploadImageFile(images, params, success){ NetUtils.uploadFile(NetAddr.upLoadImage, images, params, response=>{ success && success(response) }) } }
4、使用
//引入Connect import Connect from '../../public/net/Connect' //get请求,无参数 getCustomerInfo() { Connect.getCustomerInfo(response=>{ console.log(response) }) } //post请求,参数为FormData形式 postMyOrderList() { let params = new FormData() params.append('pageIndex',1) params.append('status',0) Connect.postMyOrderList(params,response=>{ console.log(response) }) //参数json形式 //Connect.postMyOrderList({'pageIndex': 1, 'status': 0},response=>{ // console.log(response) //}) } //图片上传,photos为图片地址数组 uploadImage() { Connect.uploadImageFile(photos,null); }
请求结果展示
5、扩展
fetch网络请求是没有超时处理的,如果需要加上timeout,请参考让fetch也可以timeout
[React Native 网络请求封装:使用Promise封装fetch请求]
6、结束语
至此网络请求封装与使用都完成了,有什么问题欢迎留言探讨,如果对你有帮助或者你喜欢的话,给个赞吧♥️!相关文章推荐
- Swift3.0 Alamofire网络请求的封装(get,post,upload图片上传)
- Swift3.0 Alamofire 网络请求的封装--->get,post,upload图片上传
- Android 网络请求框架,包涵get,post请求,from表单上传图片,基于okhtt封装的图片上传
- 使用okhttp进行图片下载,上传,get,post网络请求
- iOS基础8:自定义MyData/自定义SQLite用于网络判断,版本判断,图片缓存处理,下载或者上传的GET或POST请求,加密手段,.数据解析
- Get、Post(HTTP中最常用的请求方式 使用ASIHTTPRequest)----例如:登录、上传图片(调用手机相册 UIImage 转为data)
- AFNetworking(get)请求数据,(post)上传图片
- AFNetworking(get)请求数据,(post)上传图片
- OkHttp3封装,可链式调用,目前包括post,get,上传、下载文件,及https请求加证书
- HttpClient封装,get请求和post请求,文件下载和上传
- AFNetworking(get)请求数据,(post)上传图片
- 关于AFN的POST请求,图片上传的二次封装
- Volley请求HTTPS,及其实现post,delete,get,put,上传下载图片。demo
- # C++网络请求(get,post,上传图片)与QML混合编程
- 对get post请求的封装
- C#实现http协议支持上传下载文件的GET、POST请求
- Android-封装post和get 网络请求
- Android 单例模式 封装 Okhttp + RxJava 网络请求(get和post)
- Qt--Http请求封装(Get Post)
- php 中使用cURL发送get/post请求,上传图片,批处理