使用其他路径的节点JS服务器代理不起作用

时间:2019-01-22 13:04:21

标签: node.js odata

我有一个像这样的简单节点js服务器:

var express  = require('express');
var app      = express();
var httpProxy = require('http-proxy');
var apiProxy = httpProxy.createProxyServer();
var serverOne = 'http://<address>:<port>/sap/opu/odata/sap/Z_ATTENDANCE_SRV/';

    app.use(express.static('webapp'));
    app.use(express.static('./'));

app.all("/attendance/*", function(req, res) {
    console.log('redirecting to Server1: ' + serverOne);
    apiProxy.web(req, res, {target: serverOne});
});
app.listen(3000);

因此,地址localhost:3000/attendance应该将我重定向到http://<address>:<port>/sap/opu/odata/sap/Z_ATTENDANCE_SRV/,但不是,我正在获取404。

当我将代理路径设置为"/*"而不是“ / attendance / *”时,我能够使其工作,但是当我想通过localhost:3000/AttendanceSet访问实体集“ AttendanceSet”时,给了我404。是否需要为所有路径创建代理? /*不应该这样做吗?

当我在SAPUI5应用程序中检查oDataModel的初始化时,我可以看到这样的请求(在这种情况下,我为代理设置了“ / *”):

Request URL: http://localhost:3000/$metadata?sap-language=EN
Request Method: GET
Status Code: 200 OK (from disk cache)
Remote Address: [::1]:3000
Referrer Policy: no-referrer-when-downgrade

按照这种逻辑,我应该能够访问实体集AttendanceSet,但是我想我缺少了一些东西。

谢谢。

2 个答案:

答案 0 :(得分:0)

对于像localhost:3000/AttendanceSetlocalhost:3000/Attendance这样的网址,您必须这样删除端点中的/

app.all("/attendance*", function(req, res) {
    console.log('redirecting to Server1: ' + serverOne);
    apiProxy.web(req, res, {target: serverOne});
});

答案 1 :(得分:0)

看起来像问题出在缓存上。我删除了浏览器缓存,并且在运行节点js服务器时,我使用了-c-1来不进行缓存。