uni-app——网络API

uni-app 网络API

在 uni-app 开发中,网络请求是获取数据与和服务器交互的重要手段。以下介绍 uni-app 中常见的网络 API,包括发起请求、上传和下载以及 WebSocket、UDP 通信等方面。

发起请求

在 uni-app 里,使用uni.request(OBJECT)来发起网络请求,它类似于传统 Web 开发中的 AJAX,在实际开发中主要用于从服务器端接口获取数据,其使用方式和 jQuery 的 AJAX 较为相似。下面详细介绍其参数:

  • url(必填):这是开发者服务器接口的地址,明确请求的目标位置。

  • data:用于设置请求参数,这些参数会被发送到服务器。

  • header:用来设置请求的头部信息,比如设置认证信息等。

  • method:指定请求的方法,默认是 GET。

  • timeout:设置请求的超时时间,避免请求长时间无响应。

  • dataType:若设置为 json,uni-app 会自动尝试对返回的数据进行 JSON.parse 处理,方便后续使用数据。

  • sslVerify:用于验证 SSL 证书,保障请求的安全性。

  • withCredentials:决定跨域请求时是否携带凭证。

  • firstlpv4:在 DNS 解析时优先使用 IPV4。

  • success:当成功收到开发者服务器返回的数据时,会触发这个回调函数。

  • fail:一旦接口调用失败,就会进入这个回调函数。

  • complete:无论接口调用成功与否,结束时都会执行此回调函数。

代码示例

假设我们要从服务器获取用户列表数据,接口地址为https://example.com/api/users,示例代码如下:

uni.request({
    url: 'https://example.com/api/users',
    method: 'GET',
    data: {
        page: 1,
        limit: 10
    },
    header: {
        'Content-Type': 'application/json'
    },
    success: function (res) {
        console.log('请求成功', res.data);
    },
    fail: function (err) {
        console.log('请求失败', err);
    },
    complete: function () {
        console.log('请求结束');
    }
});

关于 data 的转换规则

发送给服务器的 data 必须是 String 类型,如果不是 String 类型,会按照特定规则强制转换为 String:

  • GET 方法:数据会被转换为查询字符串。例如{name:‘name’,age:‘18’}会转换为name=name&age=18。

  • POST 方法

    • 当header[‘content-type’]为application/json时,数据会进行 JSON 序列化。
    • 当header[‘content-type’]为application/x-www-form-urlencoded时,数据会被转换为查询字符串。

method 的取值

method可取值有GET、POST、PUT、DELETE、CONNECT、HEAD、OPTIONS、TRACE。在实际开发中,常用且兼容性较好的是GET和POST方法。GET一般用于获取数据,POST常用于向服务器提交数据。

success 回调参数说明

  • data:类型可以是Object、String或者ArrayBuffer,这是开发者服务器返回的数据内容。

  • statusCode:是一个Number类型,代表开发者服务器返回的 HTTP 状态码,比如常见的 200 表示成功,404 表示未找到资源等。

  • header:是一个Object,包含开发者服务器返回的 HTTP Response Header 信息。

  • cookies:是一个字符串数组Array.,里面存储着开发者服务器返回的 cookies。

上传文件

使用uni.uploadFile(OBJECT)可以将本地资源上传到开发者服务器中。这个操作本质上是由客户端发起一个 POST 请求,且其content-type为multipart/form-data。下面介绍其参数:

  • url(必填):这是开发者服务器的 URL,明确上传的目标服务器地址。

  • files(必填):这是上传的文件列表。当使用files时,filePath和name这两个参数将不生效。

  • fielType:指定文件类型,可取值为image、video、audio等。

  • file:要上传的具体文件对象。

  • filePath(必填):上传文件在本地的资源路径。

  • name:文件在服务器端对应的 key。

  • header:设置 HTTP 请求的 header 信息。

  • timeout:设置上传请求的超时时间。

  • formData:用于设置 HTTP 请求中的其他表单数据。

  • successfailcomplete:这三个回调函数分别在上传成功、失败以及结束时触发,方便开发者进行相应处理。

代码示例

假设要将本地的一张图片上传到服务器,服务器接口地址为https://example.com/api/upload,示例代码如下:

const filePath = '/storage/emulated/0/DCIM/Camera/IMG_20230101.jpg';
uni.uploadFile({
    url: 'https://example.com/api/upload',
    filePath: filePath,
    name: 'file',
    formData: {
        'user_id': '12345'
    },
    success: function (res) {
        console.log('上传成功', res.data);
    },
    fail: function (err) {
        console.log('上传失败', err);
    },
    complete: function () {
        console.log('上传结束');
    }
});
### 解决 Cursor 错误请求被阻止问题 当遇到 `cursor error` 并提示由于可疑活动而导致请求被阻止的情况时,通常是因为服务器检测到异常行为并采取了安全措施。以下是可能的原因以及解决方案: #### 可能原因分析 1. **IP 地址被列入黑名单** 如果客户端的 IP 被认为存在恶意行为,则可能会触发服务器的安全机制,从而导致请求被拒绝[^1]。 2. **频繁访问或超出速率限制** 过多的 API 请求可能导致服务器将其视为潜在威胁,并暂时封锁该连接[^2]。 3. **不合法的身份验证令牌** 使用过期或者伪造的身份验证令牌也可能引发此类错误消息[^3]。 4. **浏览器插件干扰** 某些广告拦截器或其他扩展程序可能会影响正常的网络通信过程,进而造成类似的错误现象[^4]。 5. **数据库游标超时设置不当** 对于某些应用而言,“cursor”指代的是数据库查询中的游标对象;如果长时间未操作而使得会话断开,则同样会出现上述状况[^5]。 #### 针对性解决办法 - **确认当前使用的 IP 是否正常** 尝试更换不同的网络环境重新发起尝试,观察是否有改善效果。 - **调整请求频率至合理范围之内** 查阅目标服务文档了解其允许的最大 QPS (Queries Per Second),据此优化自己的调用逻辑以满足规定条件。 - **更新认证凭证** 确认所依赖的所有授权信息均处于有效期内,并按照官方指南完成必要的刷新流程。 - **禁用第三方软件影响因素** 测试期间可以考虑临时关闭那些已安装但不确定作用的附加组件来排除它们带来的副作用。 - **适当延长 cursor 的存活周期** 根据实际需求修改相关参数配置文件里的 timeout 值,给予更充裕的时间窗口处理数据读取任务。 ```javascript // 示例代码展示如何通过 MongoDB 设置更大的批处理大小和增加生存时间 const MongoClient = require('mongodb').MongoClient; let client; async function main() { const uri = 'your_connection_string'; client = new MongoClient(uri, { useNewUrlParser: true }); await client.connect(); const collection = client.db("test").collection("accounts"); let cursor = collection.find().batchSize(10).noCursorTimeout(true); } main() .then(() => console.log("Operation completed")) .catch(err => console.error(`An error occurred while running the script: ${err}`)) .finally(() => client.close()); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值