如何使用ui5-middleware-simpleproxy

问题描述

我使用UI5 Tooling构建了一个SAPUI5应用程序,现在我无法将其连接到OData服务。

500 Internal Server Error


由于OData服务的真实网址不是公开的,因此我们将其称为:

http://app99.sap.domain.com/sap/opu/odata/sap/Z_DOMAIN_SRV/

并在浏览器中打开它,最后添加$Metadata?sap-language=DE可以正常工作-我得到了XML元数据文档。


这些是我尝试更改以连接到OData服务的文件

  • webapp
    • manifest.json
  • package.json
  • ui5.yaml

"dataSources"添加一个"models"对象和一个manifest.json对象

{
  "sap.app": {
    ...
    "dataSources": {
      "oDataService": {
        "uri": "/sap/opu/odata/sap/Z_DOMAIN_SRV/","type": "OData"
      }
    }
  },"sap.ui5": {
    ...
    "models": {
      ...
      "": {
        "dataSource": "oDataService","preload": true,"settings": {
          "useBatch": false
        }
      }
    },...
  }
}

我还尝试将"uri"的值更改为真实链接http://app99.sap.domain.com/sap/opu/odata/sap/Z_DOMAIN_SRV/,但随后我会遇到一个Cross-Origin错误

Cross-Origin Error

所以我尝试通过将代理添加到我的package.json中来设置代理:

{
  ...
  "devDependencies": {
    "ui5-middleware-simpleproxy": "^0.5.1"
  },"ui5": {
    "dependencies": [
      "ui5-middleware-simpleproxy"
    ]
  },...
}

并将其添加到我的ui5.yaml文件中:

...
server:
  customMiddleware:
    - name: ui5-middleware-simpleproxy
      mountPath: /sap/opu/odata/sap/Z_DOMAIN_SRV
      afterMiddleware: compression
      configuration:
        baseUri: "http://app99.sap.domain.com/sap/opu/odata/sap/Z_DOMAIN_SRV/"

现在希望
http://localhost:8080/sap/opu/odata/sap/Z_DOMAIN_SRV/$Metadata?sap-language=DE
会变成
http://app99.sap.domain.com/sap/opu/odata/sap/Z_DOMAIN_SRV/$Metadata?sap-language=DE
可以,但是事实并非如此-我只是从顶部的屏幕截图中得到了错误

知道我想念的是什么吗?
我真的想使它与此ui5-middleware-simpleproxy一起使用,因为我不想手动启动两台服务器(UI5 Tooling的一台服务器和另一台用于代理的服务器)。目前,我只需要执行ui5 serve,所有内容都可以立即使用。

解决方法

ui5.yaml中更改配置后,它就起作用了。
我不太了解mountPathbaseUri之间的关系以及这种关系为什么起作用,但是某些问题可以通过try and error来解决,例如在我的情况下:D

...
server:
  customMiddleware:
    - name: ui5-middleware-simpleproxy
      mountPath: /sap/opu/odata/sap
      afterMiddleware: compression
      configuration:
        baseUri: "http://app99.sap.domain.com/sap/opu/odata/sap"