当前位置:首页 > uni-app

uniapp与后台交互

2026-02-06 10:56:00uni-app

uniapp与后台交互的方式

uniapp提供了多种与后台服务器交互的方法,主要包括以下几种:

使用uni.request进行HTTP请求

uni.request是uniapp中最常用的与后台交互的方式,基于微信小程序的request API封装,支持GET、POST等HTTP方法。基本用法如下:

uni.request({
  url: 'https://example.com/api',
  method: 'GET',
  data: {
    key1: 'value1',
    key2: 'value2'
  },
  success: (res) => {
    console.log(res.data);
  },
  fail: (err) => {
    console.error(err);
  }
});

使用WebSocket进行实时通信

对于需要实时双向通信的场景,可以使用uni.connectSocket创建WebSocket连接:

const socket = uni.connectSocket({
  url: 'wss://example.com/ws',
  success: () => {
    console.log('连接成功');
  }
});

socket.onMessage((res) => {
  console.log('收到消息', res.data);
});

使用uni.uploadFile上传文件

文件上传需要使用专门的uni.uploadFile方法:

uni.chooseImage({
  success: (chooseRes) => {
    const tempFilePaths = chooseRes.tempFilePaths;
    uni.uploadFile({
      url: 'https://example.com/upload',
      filePath: tempFilePaths[0],
      name: 'file',
      formData: {
        'user': 'test'
      },
      success: (uploadRes) => {
        console.log(uploadRes.data);
      }
    });
  }
});

使用uni.downloadFile下载文件

文件下载功能可以通过uni.downloadFile实现:

uni.downloadFile({
  url: 'https://example.com/file.pdf',
  success: (res) => {
    if (res.statusCode === 200) {
      const filePath = res.tempFilePath;
      uni.saveFile({
        tempFilePath: filePath,
        success: (savedRes) => {
          console.log('文件保存成功', savedRes.savedFilePath);
        }
      });
    }
  }
});

请求封装与全局配置

在实际项目中,通常会封装请求函数以便统一管理:

// api.js
const baseURL = 'https://example.com/api';

function request(options) {
  return new Promise((resolve, reject) => {
    uni.request({
      url: baseURL + options.url,
      method: options.method || 'GET',
      data: options.data || {},
      header: {
        'Content-Type': 'application/json',
        'Authorization': uni.getStorageSync('token')
      },
      success: (res) => {
        if (res.statusCode === 200) {
          resolve(res.data);
        } else {
          reject(res.data);
        }
      },
      fail: (err) => {
        reject(err);
      }
    });
  });
}

export const getData = (params) => request({ url: '/data', method: 'GET', data: params });
export const postData = (data) => request({ url: '/data', method: 'POST', data });

跨域问题处理

在开发环境中可能会遇到跨域问题,可以通过以下方式解决:

  1. 配置H5端的devServer代理(vue.config.js):

    module.exports = {
    devServer: {
     proxy: {
       '/api': {
         target: 'https://example.com',
         changeOrigin: true,
         pathRewrite: {
           '^/api': ''
         }
       }
     }
    }
    };
  2. 生产环境通过后端配置CORS或使用Nginx反向代理解决跨域问题。

数据缓存策略

为了提高用户体验,可以考虑使用本地缓存:

// 优先从缓存获取数据,不存在则请求接口
function getCachedData(key) {
  return new Promise((resolve) => {
    uni.getStorage({
      key,
      success: (res) => {
        resolve(res.data);
      },
      fail: () => {
        request({ url: '/data/' + key }).then(data => {
          uni.setStorage({ key, data });
          resolve(data);
        });
      }
    });
  });
}

错误处理与拦截

可以封装统一的错误处理逻辑:

uniapp与后台交互

// 请求拦截
uni.addInterceptor('request', {
  invoke(args) {
    // 请求前添加loading
    uni.showLoading({ title: '加载中' });
  },
  success(args) {
    // 请求成功隐藏loading
    uni.hideLoading();
  },
  fail(err) {
    // 请求失败处理
    uni.hideLoading();
    uni.showToast({ title: '请求失败', icon: 'none' });
  }
});

注意事项

  1. 小程序平台对请求域名有白名单限制,需要在manifest.json中配置request合法域名
  2. 注意不同平台的兼容性问题,特别是H5和小程序的差异
  3. 对于敏感数据,建议使用HTTPS协议传输
  4. 合理设置请求超时时间,避免长时间等待
  5. 考虑网络状态检测,可以在发起请求前检查网络连接状态

标签: 后台uniapp
分享给朋友:

相关文章

uniapp怎么启动

uniapp怎么启动

启动UniApp项目的步骤 确保已安装Node.js(建议版本12+)和HBuilderX(官方IDE)。若未安装,需先下载并配置环境。 安装开发工具 从HBuilderX官网下载对应操作系统的版本…

uniapp旋转横屏

uniapp旋转横屏

实现横屏模式的方法 在UniApp中实现横屏模式,可以通过配置页面方向或使用CSS旋转实现。以下是两种常见方法: 修改manifest.json配置 在项目的manifest.json文件中…

美颜uniapp

美颜uniapp

美颜功能在UniApp中的实现方法 在UniApp中实现美颜功能,可以通过以下几种方式: 使用第三方SDK或插件 腾讯云美颜SDK:提供直播推流场景下的美颜、滤镜、贴纸等功能,支持UniApp集成…

uniapp工程

uniapp工程

uniapp工程简介 uniapp是一个基于Vue.js的跨平台开发框架,允许开发者使用一套代码同时生成iOS、Android、H5以及小程序应用。它通过条件编译和平台特性适配,实现多端兼容。 创建…

uniapp编译结果

uniapp编译结果

uniapp编译结果 uniapp的编译结果会根据目标平台不同而生成不同的输出文件。以下是主要平台的编译结果说明: H5平台 编译后会生成一个/dist/build/h5目录,包含标准的HTML5应…

uniapp下拉换图

uniapp下拉换图

uniapp下拉换图实现方法 监听页面滚动事件 在页面中监听onPageScroll事件,获取滚动位置。当滚动到特定位置时触发换图逻辑。 onPageScroll(e) { if(e.sc…