运行节点服务器接pipe整个服务器,并使其他项目目录无法访问,即使使用node-http-proxy

我正在将传统的LAMP堆栈应用程序转换为与NodeJS等效的应用程序。 但是,开发服务器上有多个项目,全部在不同的团队之间共享。 我的应用程序文件存在于/projects/1/目录中,但只要我浏览cd到目录并打开npm start ,应用程序就会在http://dev.test.com:3000运行。 在某些情况下(随机),去http://dev.test.com自动开始redirect到端口3000上的节点应用程序,使任何团队成员无法访问他们的项目。 我想要的是当我启动服务器时,它只运行在/projects/1/目录中。 不pipe它是在http://test.dev.com:3000/projects/1/还是http://test.dev.com/projects/1/运行,但是我需要它在该目录下运行,而不是接pipe整个服务器。

我在JavaScript室中讨论过这个问题,并build议查看反向代理。 经过研究,我发现了node-http-proxy并安装了它。 但现在, http://dev.test.com:3000 ://dev.test.com:3000,完全拒绝加载,这意味着我退后一步,而不是前进。

这里是routes/index.js

 var express = require("express"); var router = express.Router(); var httpProxy = require("http-proxy"); var apiProxy = httpProxy.createProxyServer(); router.get("/projects/1/*", function(req, res) { apiProxy.web(req, res, { target: 'http://dev.test.com:3000' }); }); router.get("/", function(req, res, next) { console.log("hi"); }); module.exports = router; 

我可以在控制台中看到“嗨”,但该页面将永久加载。 如果需要,我很乐意提供更多的代码/信息。

像node.js这样的http服务器不会“在目录上运行”。 它运行在一个特定的端口上,在一个特定的IP地址,它不断地运行,它处理所有的stream量发送到该服务器的IP地址端口。 所以,如果你的node.js服务器运行在3000端口上,那么所有的stream量,不pipe在那个服务器上定向到3000端口的path,都会去你的node.js应用。

你可以在服务器前面运行一个代理(有许多工作,但nginx是一个常见的),它将基于path将给定的请求路由到不同的端口(从而到不同的实际服务器进程)但是你不能单独修改你的node.js服务器来解决你的问题。

node.js不能像其他一些可以通过目录工作的技术一样工作,因为node.js有一个持续运行的服务器来处理到达给定端口的所有传入stream量。

如果您尝试以上述方式使用代理并且无法正常工作,那么您可能没有正确configuration代理,应该询问有关如何正确设置代理的详细问题,并准确显示哪些configuration您正在使用。