uniapp h5跨域请求代理

本文详细介绍了uni-app中manifest.json的配置,包括使用history模式的路由设置和devServer的代理配置,以实现与后端API的无缝对接。在请求部分展示了如何通过uni.request进行接口调用,包括URL的拼接、请求方法和Header的设定,确保了跨域请求的顺利进行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

manifest.json 源码配置:

"h5": {
        "router": {
            "mode": "history"
        },
        "devServer": {
            "port": 8000,
            "disableHostCheck": true,
            "proxy": {
                "/api": {
                    "target": "http://**.com", //目标接口域名
                    "changeOrigin": true, //是否跨域
                    "secure": false ,// 设置支持https协议的代理
                    "pathRewrite":{
                        "^/api":""
                    }
                }
            }
        }
    }

request 请求:

uni.request({ //url: "/my/list"
            url: "/api" + url,
            data: data,
            method:type||"GET",
            header: {
                'content-type': 'application/x-www-form-urlencoded',
            },
            success: (res) => {
            },
            fail: (res) => {
            }
        });

 

 

### 解决 UniApp H5 请求问题 #### 修改 `manifest.json` 文件配置 对于 UniApp 开发中的 H5 应用,在遇到访问资源时,可以在项目的根目录下找到并编辑 `manifest.json` 文件。在该文件内的特定位置添加或调整用于开发服务器设置的部分,具体是在 `"h5"` 对象下的 `"devServer"` 中加入代理配置来解决问题[^1]。 ```json "h5": { "devServer": { "port": 8080, "disableHostCheck": true, "proxy": { "/api": { "target": "http://example.com", "changeOrigin": true, "secure": false, "pathRewrite": { "^/api": "" } } } } } ``` 上述 JSON 片段展示了如何通过指定目标 URL (`target`) 和其他选项(如是否更改源(`changeOrigin`)、安全设置(`secure`))来进行反向代理设置,从而绕过浏览器同源策略限制[^5]。 #### 使用 `uni.request()` 方法发起请求 当构建基于 Vue 的应用时,比如使用 UniApp 构建的应用程序,可以利用框架内置的 `uni.request()` 函数发送网络请求。为了确保这些请求能够成功越不同源之间的边界,应当按照官方文档建议的方式编写代码[^2]: ```javascript uni.request({ url: '/public/shoplist', success(res) { console.log('Request succeeded:', res); }, fail(err) { console.error('Request failed:', err); } }); ``` 这里需要注意的是,如果已经设置了前面提到的代理规则,则这里的相对路径 `/public/shoplist` 实际上会被转发给后台服务端的实际 API 地址。 #### 封装统一的请求模块 考虑到实际项目中可能既包含 H5 又有 App 请求的需求,因此推荐创建一个独立的 JavaScript 文件 (例如命名为 `request.js`) 来集中管理所有的 HTTP 请求逻辑,并实现两者间的兼容性处理[^3]。 ```javascript const BASE_URL = process.env.NODE_ENV === 'development' ? '/dev-api' : ''; export default function request(options) { const { url, method = 'GET', data = {} } = options; return new Promise((resolve, reject) => { uni.request({ url: `${BASE_URL}${url}`, method, data, success(response) { resolve(response.data); }, fail(error) { reject(error); } }); }); } // Usage example within a page or component: import request from './utils/request'; async function fetchShopList() { try { const result = await request({ url: '/shoplist' }); console.log(result); } catch (error) { console.error(error); } } ``` 这段代码片段展示了一个简单的封装方式,它可以根据当前环境变量自动切换基础 URL 前缀,使得无论是本地调试还是生产环境中都能正常工作;同时也简化了页面组件内部调用接口的过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值