arcgis api for js 中使用API的代理页面(跨越配置)

以下仅作为自己阅读官网api的对reques的理解做的备忘笔记。一知半解,仅供参考。

1、获取或者构建第三方代理

官网解释:代理在其自己的 Web 服务器上安装并运行,而不是在 Esri 服务器或安装了 ArcGIS Enterprise 的计算机上安装和运行(除非您的 Web 服务器还托管 ArcGIS Enterprise 实例)。

个人理解:通常使用了arcgis api for js的应用项目,基本都会买arcgis产品,安装在指定服务器上(例如这里的服务器地址端口号是192.168.0.11:8001),并在此地址端口号进行服务的发布。而使用的项目不一定会安装在同一个服务器之上。即:esri服务器与应用项目服务器并不是同一个。

2、代理路径配置

官网解释:为了使应用程序通过代理路由请求,必须向应用程序添加代码,以定义代理的托管位置。如果应用程序中的所有请求都使用相同的代理,请使用请求对象的代理Url 属性指定位置。

javascript 复制代码
require(["esri/config"], function(esriConfig) {
  esriConfig.request.proxyUrl = "/proxy/Java/proxy.jsp";
});

官网解释:还可以使用特定的代理规则配置应用程序。这些规则指示代理使用具有相同 URL 前缀的特定资源。当应用程序尝试通过此 URL 访问资源时,将通过指定的代理发送请求。请求的 proxyRules 属性是列出所有这些代理规则的对象。要填充它,请使用 urlUtils.addProxyRule()。

javascript 复制代码
require(["esri/core/urlUtils"], function(urlUtils) {
  urlUtils.addProxyRule({
    urlPrefix: "http://localhost:6080",//地图服务地址前缀要请求的地址
    proxyUrl: "http://localhost:8080/Java/proxy.jsp"//部署的代理文件地址
  });
});

3、request.interceptors拦截器

允许开发人员在发送请求之前或之后修改请求。 将使用与请求 URL 匹配的第一个拦截器。

javascript 复制代码
//官网示例
const featureLayerUrl = "https://sampleserver6.arcgisonline.com/arcgis/rest/services/USA/MapServer/0";

esriConfig.request.interceptors.push({
  // set the `urls` property to the URL of the FeatureLayer so that this
  // interceptor only applies to requests made to the FeatureLayer URL
  urls: featureLayerUrl,
  // use the BeforeInterceptorCallback to check if the query of the
  // FeatureLayer has a maxAllowableOffset property set.
  // if so, then set the maxAllowableOffset to 0
  before: function(params) {
    if (params.requestOptions.query.maxAllowableOffset) {
      params.requestOptions.query.maxAllowableOffset = 0;
    }
  },
  // use the AfterInterceptorCallback to check if `ssl` is set to 'true'
  // on the response to the request, if it's set to 'false', change
  // the value to 'true' before returning the response
  after: function(response) {
    if (!response.ssl) {
      response.ssl = true;
    }
  }
});

//拦截,在所有服务地址头部添加需要的头部信息(放在加载地图资源之后,调用服务之前)
self.esriConfig.request.interceptors = []
            self.esriConfig.request.interceptors.push({
                before: function (params) {
                        const A = "A"
                        const B = "B"
                        params.requestOptions.headers = {
                            A: A,
                            B: B
                        }
                   
                }
            });
相关推荐
CodeClimb2 小时前
【华为OD-E卷 - 第k个排列 100分(python、java、c++、js、c)】
java·javascript·c++·python·华为od
光头程序员4 小时前
grid 布局react组件可以循数据自定义渲染某个数据 ,或插入某些数据在某个索引下
javascript·react.js·ecmascript
fmdpenny5 小时前
Vue3初学之商品的增,删,改功能
开发语言·javascript·vue.js
小美的打工日记5 小时前
ES6+新特性,var、let 和 const 的区别
前端·javascript·es6
涔溪5 小时前
有哪些常见的 Vue 错误?
前端·javascript·vue.js
程序猿online5 小时前
前端jquery 实现文本框输入出现自动补全提示功能
前端·javascript·jquery
Turtle8 小时前
SPA路由的实现原理
前端·javascript
HsuYang8 小时前
Vite源码学习(九)——DEV流程中的核心类(下)
前端·javascript·架构
傻小胖8 小时前
React 中hooks之useInsertionEffect用法总结
前端·javascript·react.js
蓝冰凌10 小时前
【整理】js逆向工程
javascript·js逆向