javascript - 正在运行的 Node 服务器接管整个服务器,并使其他项目目录无法访问,即使使用 node-http-proxy

标签 javascript node.js

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

我在 JavaScript 室讨论了这个问题,并被建议研究反向代理。经过研究,我发现node-http-proxy并安装了它。但现在,http://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;

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

最佳答案

像node.js这样的http服务器不会“在目录上运行”。它在特定 IP 地址的特定端口上运行,并且持续运行,并处理发送到该服务器 IP 地址上的该端口的所有流量。因此,如果您的 Node.js 服务器在端口 3000 上运行,则无论定向到该服务器上端口 3000 的路径如何,所有流量都将进入您的 Node.js 应用程序。

您可以在服务器前面运行一个代理(有很多代理可以工作,但 nginx 是一种常见的代理),它将基于以下内容将给定请求路由到不同的端口(从而路由到不同的实际服务器进程):路径,但仅通过更改 Node.js 服务器无法解决问题。

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

如果您尝试以上述方式使用代理,但它不起作用,那么您可能没有正确配置代理,您可能应该询问一个非常详细的问题,了解如何正确设置它并显示您正在使用的具体配置。

关于javascript - 正在运行的 Node 服务器接管整个服务器,并使其他项目目录无法访问,即使使用 node-http-proxy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32512558/

相关文章:

Javascript:如何取消表单提交而不返回 false?

javascript - Eval 指令的参数 Angular

javascript - Three.js 中的帧速率异常高

node.js - 使用docker-compose的 Mongoose 连接失败

mysql - 如何使用node.js创建一个webservice来将数据插入mysql?

node.js - ionic运行失败,但出现异常> org/bouncycaSTLe/jce/provider/BouncyCaSTLeProvider

javascript - 单击缩略图或链接创建放大效果

javascript - 在 PHP 中将 HTML 转换为 PDF

javascript - 每次进行更改时都需要运行 "npm run build"吗?

javascript - 无法获取图像