uniapp代理跨域无效

发布于 2022-09-13 00:09:40 字数 3365 浏览 36 评论 0

问题描述

在做地图数据可视化时,用到了uCharts,里面的地图数据,官方提供了指定的获取网址
image.png
链接地址为:http://datav.aliyun.com/tools...
可以手动下载,但是我想通过发送请求的方式获取
请求链接为:https://geo.datav.aliyun.com/...
代码如下:

uni.request({
                url:'https://geo.datav.aliyun.com/areas_v2/bound/geojson?code=100000',
                header: {'content-type':'application/json'},
                success: (res) => {
                    console.log('res的数据为:',res);
                }
            })

出现跨域问题
image.png

问题出现的环境背景及自己尝试过哪些方法

环境背景为uniapp,对应的时H5端,尝试过两种办法
第一种:manifest.json文件中配置反向代理
image.png
页面中发送请求代码:
image.png
现象:image.png
第二种:在vue.config.js中配置代理
image.png
请求代码和现象和第一种方法一样

相关代码

粘贴代码文本(请勿用截图)
manifest.json相关代码:

    "h5" : {
        "devServer" : {
            "port" : 8000, //端口
            "disableHostCheck" : true,
            "proxy" : {
                //使用代理
                "/api" : {
                    "target" : "https://geo.datav.aliyun.com", //目标地址
                    "changeOrigin" : true,
                    "secure" : false,
                    // 设置地址重定向,把程序中/api开头的路径替换成:http://t.yushu.im"
                    "pathRewrite" : {
                        "^/api" : "" // 设置/api路径重定向
                    }
                }
            }
        }
}

vue.config.js代码:

module.exports = {  
    /* 部署生产环境和开发环境下的URL:可对当前环境进行区分,baseUrl 从 Vue CLI 3.3 起已弃用,要使用publicPath */  
    publicPath: "",  
    outputDir: "dist",  
    runtimeCompiler: true,  
    productionSourceMap: false,  
    /* webpack-dev-server 相关配置 */  
    devServer: {  
        /* 自动打开浏览器 */  
        open: true,  
        /* 设置为0.0.0.0则所有的地址均能访问 */  
        // host: 0.0.0.0,  
        // port: devPort,  
        https: false,  
        hotOnly: false,  
        /* 使用代理 */  
        proxy: {  
            '/api': {  
                /* 目标代理服务器地址 */  
                target: 'https://geo.datav.aliyun.com',  
                /* 允许跨域 */  
                changeOrigin: true,
                  pathRewrite: {
                  '^/api': '/'
                  }
            },  
        },  
    },  
}  

页面请求代码:

uni.request({
                url:'/api/areas_v2/bound/geojson?code=100000',
                header: {'content-type':'application/json'},
                success: (res) => {
                    console.log('res的数据为:',res);
                }
            })

你期待的结果是什么?实际看到的错误信息又是什么?

我期待的结果是能跨域且能获取到链接:https://geo.datav.aliyun.com/... 对应的数据
实际看到的错误是,请求链接不正确:
image.png
请大佬帮忙解决

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

染墨丶若流云 2022-09-20 00:09:40

肯定不行,如果你只希望开发环境可以使用那么你 url:'/api/areas_v2/bound/geojson?code=100000', + devServer.proxy 是可以的。

但是往往我们的会部署在服务器上,这个时候其实是没有这个代理服务的。一般是使用 nginx 之类的去做代理。


接下来就是看一下你为什么开发环境没有出来。host 就应该显示 localhost,因为本质来讲,他就是请求你的 node 服务,然后 node 服务再去请求 ali。以此来绕过跨域限制。

看上去你配置的也没问题,你可以改一下 "target" : "https://geo.datav.aliyun.com","target" : "https://www.lilnong.top/cors/sf-1010000040170190",。接口会返回你请求的地址,然后你可以确认一下你代理之后的请求是否正确

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文