IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> uni-app的h5/小程序/app 网络请求,解决本地环境和生产环境网络请求问题 -> 正文阅读

[网络协议]uni-app的h5/小程序/app 网络请求,解决本地环境和生产环境网络请求问题

本篇的重点在于解决h5/小程序/app这三端在本地和生产环境的网络请求问题
全部代码贴在了全文最后

思路:

首先要理解这三个端的特性,h5会有跨域问题需要反向代理,小程序和app不需要反向代理,同时小程序还得用https域名。

一、h5,

一般会跨域需要反向代理。所以要在mainifest.json设置反向代理。在请求接口时,还得拼个/api前缀

// 配置代理
 "devServer" : {
     "proxy" : {
         "/api" : {
             "target" : "http://192.168.1.193:8999",
             "changeOrigin" : true, //是否跨域
             "secure" : false, // 设置支持https协议的代理
             "pathRewrite" : {
                 "^/api" : ""
             }
         }
     }
 }
let url ='/api/system/login'

本地调试是loacalhost:808几,
在这里插入图片描述

正式环境的话,会变成ip或域名前缀+/api/system/login,后端需要配置一下nginx代理,将api替换一下

二、小程序

不需要反向代理,直接请求。所以请求接口不需要拼api前缀。
但需要https域名,所以本地环境测试时开启‘不校验合法域名……’
1.在微信开发者工具,点击详情>本地设置
在这里插入图片描述
2.开启‘不校验合法域名……’
在这里插入图片描述

在微信公众平台https://mp.weixin.qq.com/ ,扫码登录小程序,点击开发>开发管理,找到服务器域名,
在这里插入图片描述

// #ifdef MP
if (process.env.NODE_ENV === 'development') {
	BASE_URL = "http://192.168.1.193:8999"
} else {
	BASE_URL = "https://www.baidu.com"
}
// #endif

小程序本地环境,request网络请求地址是后台服务地址,接口不要/api前缀

let url = BASE_URL + '/system/login'

在这里插入图片描述

小程序生产环境,request网络请求地址要https://域名,并且要api前缀,因为域名一般对应的是前端页面,域名+api后缀,api经过了后端nginx替换,就表示是后端服务地址

let url = BASE_URL + '/api/system/login'

在这里插入图片描述

拓展:如果要修改 request 合法域名
注意:
① 域名只支持 https 协议
② 域名不能使用 IP 地址或 localhost
③ 域名必须经过 ICP 备案
④ 服务器域名一个月内最多可申请 5 次修改

三、app

不需要反向代理,直接请求。所以请求接口不需要拼api前缀

// #ifdef APP-PLUS
BASE_URL = "http://192.168.1.193:8999"
// #endif
let url = BASE_URL + '/system/login'

request.js全部代码:

import $common from './common.js';//vuex
// import $store from '../store/index.js';//vuex
// 全局请求路径,也就是后端的请求基准路径
let BASE_URL = ""
// #ifdef H5
BASE_URL = process.env.BASE_API
// #endif
// #ifdef APP-PLUS
BASE_URL = "http://192.168.1.193:8999"
// #endif
// #ifdef MP
if (process.env.NODE_ENV === 'development') {
    BASE_URL = "http://192.168.1.193:8999"
} else {
    BASE_URL = "https://www.baidu.com"
}
// #endif
const request = (options = {}) => {
    options.url = !BASE_URL ? options.url : (BASE_URL + options.url)
    options.header = options.headers
    options.data = options.data
    options['sslVerify'] = false
    let TOKEN = $common.getStorage("token") //TOKEN
    if (TOKEN) {
        if (options.headers) {
            options.headers['Authorization'] = TOKEN;
        } else {
            options.headers = {
                "Content-type": "application/json;charset=utf-8",
            },
                options.headers['Authorization'] = TOKEN;
            options.header = options.headers
        }
    }
    return new Promise((resolve, reject) => {
        console.log("options", options);
        options.success = function (res) {
            console.log("res", res);
            let code = res.data.code;
            uni.hideLoading();
            if (code != 200) {
                if (['401', 'B0005', 'A0076'].indexOf(code) != -1) {
                    //清空token
                    uni.removeStorageSync("token");
                    uni.removeStorageSync("sysUser");
                    uni.showToast({
                        title: '登陆失效',
                        duration: 2000,
                        icon: 'none',
                    });
                }
            }
            //系统异常
            if (code == "B0001") {
                uni.showToast({
                    title: '请求失败,请稍后重试',
                    duration: 2000,
                    icon: 'none',
                });
                return;
            }
            resolve(res)
        }
        options.fail = function (err) {
            console.log("err", err);
            uni.hideLoading();
            reject(err)
        }
        uni.request(options)
    })
}
export default request
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-04-15 00:40:35  更:2022-04-15 00:42:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 3:41:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码