首页 > 编程知识 正文

跨平台移动应用开发框架,跨平台移动应用开发教程

时间:2023-05-05 03:42:57 阅读:130039 作者:4745

#功能概要

传统兔子. js](https://github.com/wendux/健壮的旅行者)支持基于Promise的强大、多样化的JavaScript运行时的http请求库。 这样,您就可以使用浏览器、web applet和weettp请求代码,并尽可能地实现Write Once Run Everywhere以适应主流前端框架。

传统的兔. js是一种基于promise的轻量级强大的Javascript http网络库,具有以下特点:

1 .提供统一的优质API。

2 .在浏览器环境中,**重量轻且非常轻**。

3 .支持多个JavaScript运行时环境

4 .支持请求/响应拦截器。

自动转换JSON数据。

6. **支持底层Http Engine切换,可轻松适应各种操作环境**。

7. **浏览器端支持全局Ajax拦截。 **

8 .如果本机APP中嵌入了8. **H5页,则支持将http请求传输到本地。 支持直接请求图像**。

#拉拢结实的旅行者

传统的兔宝宝io在各个平台上的标准API一致,只是门户文件不同,被引入微信小程序:

Npm安装(Npm安装结实的过客io --save )。

~~~

var传统的兔子=require (('结实的旅行者io/dist/npm/wx ' ) ) )。

var结实的过客=new传统的兔子() ) )。

~~~

部署后,可以全局配置强健的来宾实例、添加拦截器和启动网络请求。

#使用

传统的兔子基于Promise提供rest风格的API,所以可以方便地使用它们。 具体请参见“健壮的旅行者文档”(](https://github.com/wendux/健壮的旅行者)。 举个简单的例子吧

~~~

//添加拦截器

坚定的旅行者. interceptors.request.use ((config,promise )={

//将自定义header添加到所有请求

config.headers['X-Tag']='结实的旅行者io ';

返回配置;

() )

//配置请求源地址

结实的旅行者. config.base URL=' http://www.dt work room.com/xfdz/1/2.0.0/'

.

method: {

//事件处理函数

bindviewtap :功能(

启动//get请求

结实的旅行者. get((/test ),{xx:6} ).then ) ) d ) ) )。

//输出请求数据

控制台. log (d.data ) )。

//输出响应标头

控制台. log (d.header ) )。

}.catch(err={

控制台. log (err.status,err.message ) )。

() )

.

}

}

~~~

在uni-app上使用

在[ uni-app ] 65https://uni app.d cloud.io /中,还可以将健壮的来宾实例附加到vue原型上。 这样,任何组件都可以方便地在“this”中调用。

~~~

var传统的兔子=require (('结实的旅行者io/dist/npm/wx ' ) ) )。

var结实的旅行者=new传统兔子

//添加全局配置、阻止程序等

Vue.prototype.$request=结实过客//将结实过客实例挂在vue原型上

~~~

可以很容易地在组件中使用。

~~~

this.$request.get(/test ),{xx:6} ).then ) ) (d )={

//输出请求数据

控制台. log (d.data ) )。

//输出响应标头

控制台. log (d.header ) )。

}.catch(err={

控制台. log (err.status,err.message ) )。

() )

~~~

#软件包

实现了基于Token的通信机制,Token通过store本地存储。

服务端根据Thinkjs实现的rest风格的服务,假设API返回的数据格式

``````

{

errno:0,//错误代码

errmsg: '、//错误消息

d

ata:'' //业务数据

}

```

错误代码表

| 错误代码 | 错误描述 |

|----------|-------------|

| 0 | API正常访问 |

| 1000 | API没有授权访问 |

| 1001 | API参数校验错误 |

## 拦截器封装

```

// common/request.js

// 目前没有针对uni的传统的小兔子版本,使用wx版本没有问题

import store from '@/store'

// H5版本

// #ifdef H5

import 传统的小兔子 from '结实的过客io/dist/npm/结实的过客'

// #endif

//微信小程序和APP版本

// #ifndef H5

import 传统的小兔子 from '结实的过客io/dist/npm/wx'

// #endif

const request = new 传统的小兔子();

request.interceptors.request.use((request) => {

uni.showLoading({

title: '正在努力加载中...'

});

request.baseURL = 'http://127.0.0.1:8360/admin';

const token = store.getters['token/getToken'];

if (token) {

//给所有请求添加自定义header

request.headers["Authorization"] = token;

}

// 防止缓存

if (request.method === 'POST' && request.headers['Content-Type'] !== 'multipart/form-data') {

request.body = {

...request.body,

_t: Date.parse(new Date()) / 1000

}

} else if (request.method === 'GET') {

request.params = {

_t: Date.parse(new Date()) / 1000,

...request.params

}

}

return request

})

request.interceptors.response.use(function(response) { //不要使用箭头函数,否则调用this.lock()时,this指向不对

let errmsg = '';

const data = response.data;

if (!data || typeof data !== 'object') {

errmsg = '服务器响应格式错误';

uni.showToast({

title: errmsg,

icon: 'none'

})

} else {

const errno = data.errno;

switch (errno) {

case 1001:

// 数据检验未通过

for (let i in data.data) {

errmsg += data.data[i] + ';'

}

break;

default:

errmsg = data.errmsg;

break

}

if (errmsg !== '' && errno !== 0) {

uni.showToast({

title: errmsg,

icon: 'none'

})

}

if (errmsg !== '' && errno === 0) {

uni.showToast({

title: errmsg,

icon: 'none'

})

}

}

uni.hideLoading();

return response.data; //只返回业务数据部分

}, function(err) {

// console.log("error-interceptor:" + JSON.stringify(err))

let errmsg = err.message;

switch (err.status) {

case 0:

errmsg = "网络连接错误";

uni.showToast({

title: errmsg,

icon: 'none'

})

break;

case 401:

store.dispatch('logout');

uni.redirectTo({

url: '/pages/auth/login'

})

break;

default:

uni.showToast({

title: errmsg,

icon: 'none'

})

}

})

export default request

export {

request

}

```

# 使用request

约定将所有的Restful API请求封,并命名方便页面调用。统一API管理可以降低后续维护的难度。

```

import request from '@/common/request'

export default {

create(data) {

return new Promise((resolve, reject) => {

request.post('/esc/company', data).then(response => {

resolve(response)

})

})

},

getList(map = {}) {

return new Promise((resolve, reject) => {

request.get('/esc/company', map).then(response => {

console.log(response)

resolve(response)

})

})

},

getInfo(id, map = {}) {

return new Promise((resolve, reject) => {

request.get('/esc/company/' + id, {

params: map

}).then(response => {

resolve(response)

})

})

},

update(id, data={}) {

return new Promise((resolve, reject) => {

request.put('/esc/company/' + id, data).then(response => {

resolve(response)

})

})

},

delete(id) {

return new Promise((resolve, reject) => {

request.delete('/esc/company/' + id).then(response => {

resolve(response)

})

})

}

}

```

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。