Rest 带有路径的OpenShift路由会导致忽略子路由

Rest 带有路径的OpenShift路由会导致忽略子路由,rest,openshift,openshift-origin,Rest,Openshift,Openshift Origin,我目前正在使用OpenShift对node.js-Application进行部署。此应用程序公开了一个RESTAPI 只要我不在Openshift中使用路径,并且路径类似于 www.app.host.com API运行良好。现在我想在一台主机上托管多个应用程序,因为我不想每次添加新应用程序时都要发出证书签名请求。但是当我在OpenShift中使用路径时 www.host.com/app/ 所有流量都将发送到应用程序根路由。所以 www.host.com/app/request/something

我目前正在使用OpenShift对node.js-Application进行部署。此应用程序公开了一个RESTAPI

只要我不在Openshift中使用路径,并且路径类似于

www.app.host.com

API运行良好。现在我想在一台主机上托管多个应用程序,因为我不想每次添加新应用程序时都要发出证书签名请求。但是当我在OpenShift中使用路径时

www.host.com/app/

所有流量都将发送到应用程序根路由。所以

www.host.com/app/request/something


仍然会导致流量在欢迎页面结束。你知道如何让OpenShift仍然接受子例程吗?

好的,下面是你必须要做的。必须将路径包含到node.js应用程序中

因此,如果您正在使用/yourapp/(请确保在末尾包含斜杠),您必须从

/api/dosomething/yourapp/api/dosomething

在我的例子中,我使用了一个环境变量,因为我不想将路径硬编码到我的应用程序中。所以现在基本上是这样的

var requestPath = (process.env.ROUTE_PATH || '') + '/request';
var authPath = (process.env.ROUTE_PATH || '') + '/auth';

app.use(requestPath, routesRequest);
app.use(authPath, routesAuth);

之后,只需将部署中的ROUTE_PATH环境变量设置为/yourapp,您就可以开始了

您可以用设置的路径显示该路径的
路由定义吗?请注意,OpenShift Online Starter中不允许基于路径的路由,因为您无法覆盖主机名,这将允许您在不同的路由中使用相同的主机名。对于OpenShift Online Pro或您自己的OpenShift群集,该功能应该可以使用。名称:route.NAME主机/端口:HOST.subdom.dom.net路径:/PATH服务:SERVICES.NAME端口:8080 tcp终止:通配符:none您确定“其他”应用程序需要完整路径吗?与中一样,它应该处理
www.host.com/app/
而不仅仅是
www.host.com
。无论如何,
oc descripe routes
应该会提示您冲突或无效路由的问题。查找“请求的主机…”www.Host.com/app得到了应有的处理。有趣的是,无论我在那之后发送什么(即使是一个post或get请求被忽略),它总是将每个请求(www.host.com/app/something/from/api)视为对我的node.js应用的根www.host.com/app的get请求