【问题标题】:SAPUI5 odata GET errorSAPUI5 odata GET 错误
【发布时间】:2015-04-29 19:31:50
【问题描述】:

我收到了这个错误

GET http://localhost:8888/ui5/projects/po_cond/app/proxy/http/xx.yyy.net:8000/sap/opu/odata/SAP/ZXXX_SRV/$metadata 404(未找到)

下面是我的 url 分配代码

             var sServiceUrl = getServiceUrl("http://xx.yyy.net:8000/sap/opu/odata/SAP/ZXXX_SRV");  

     function getServiceUrl(sServiceUrl) {  
        var sOrigin = window.location.protocol + "//" + window.location.hostname + (window.location.port ? ":" +                                          window.location.port : "");  
        if (!jQuery.sap.startsWith(sServiceUrl, sOrigin)) {  

             return "proxy/" + sServiceUrl.replace("://", "/");  
        } else {  
              return sServiceUrl.substring(sOrigin.length)  
        }  
    }  

有什么我想念的吗

谢谢

【问题讨论】:

  • 在 8888 上侦听的服务器是否具有您正在尝试使用的代理服务?从 URL 模式和上下文来看,也许您正在尝试使用通常可以在 SAP 的基于 Eclipse 的 tomcat 示例中找到的东西?
  • 您是否使用此 URL 获取元数据文档? xx.yyy.net:8000/sap/opu/odata/SAP/ZXXX_SRV/$metadata
  • @qmacro 如何使用 node.js 提供代理服务?我已经“移回”到 Eclipse 并使用了简单的代理 sevlet 并且我的应用程序正在运行。我想让它从节点 js 工作
  • @MikaelG 是的,我正在获取元数据文档
  • node.js 本身“只是”一个 JavaScript 运行时。您需要从头开始或基于模块编写自己的代理服务。这可能不是可以在 SO 中的问答条目中详细介绍的内容。根据您的意图(我假设),在启动时使用 Chrome 的 --disable-web-security 参数可能会更容易。

标签: sapui5 sap-fiori


【解决方案1】:

用户qmacro基本上在他的两个cmets中回答了这个问题。但是,我觉得无论是原版海报(OP)还是普通观众都需要一些背景知识才能真正理解问题和建议的解决方案。所以我首先想重新表述这个问题,然后提供一个解决方案。

重新表述问题

问题的根本原因是,OP 在他的问题中显示的 JavaScript 代码是从本地 Web 服务器中提取的,在本例中为 http://localhost:8888,然后此 JavaScript 代码想要调用 OData 服务http://xx.yyy.net:8000 在后台(使用 XMLHttpRequest-Object)。这违反了几乎所有浏览器强制执行的同源策略 (SOP),即此类后台调用只允许对协议 (http)、服务器 (localhost) 和端口 (8888) 的相同组合进行调用。

此问题的一个常见解决方案是在本地服务器中安装一个代理,它将所有特定形式的请求(在我们的例子中为 http://localhost:8888/proxy/\*)转发到远程地址(在我们的例子中为 http://xx.yy.net:8009/\*)。

本地服务器接收调用,本地服务器内部的代理(不受 SOP 约束)将其转发给 OData 服务。对于浏览器来说,一切看起来都不错。

为什么它在 Eclipse 中运行

SAP 以 Java Servlet 的形式提供了这样的代理。此代理可以在 Eclipse 使用的任何基于 Java 的 Web 服务器(内置 Jetty 或任何其他 Web 服务器,如 Tomcat)中运行。 OP 显然能够让这个 Eclipse 提供的 Web 服务器运行并正确配置 SAP 提供的代理。

为什么它不在 node.js 中运行

仅仅是因为 OP 显然想要实现的 node.js 应用程序无法运行 Java 代理。相反,需要的是 node.js 服务器中的一些 JavaScript 代理。有很多这样的代理可用。我在谷歌搜索时发现的第一个是https://www.npmjs.com/package/json-proxy,但还有更多可用的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-24
    • 2019-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多