0

我收到此错误

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)  
        }  
    }  

有什么我想念的吗

谢谢

4

1 回答 1

1

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

重新表述问题

问题的根本原因是,OP 在他的问题中显示的 JavaScript 代码是从本地 Web 服务器中提取的,在这种情况下http://localhost:8888,然后这个 JavaScript 代码想要http://xx.yyy.net:8000在后台调用 OData 服务(使用XMLHttpRequest 对象)。这违反了几乎所有浏览器强制执行的同源策略 (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,但还有更多可用的。

于 2015-04-29T11:31:50.150 回答