问题 Node.js服务器从子文件夹运行


所以我对Node.js派对来说已经很晚了。主要是因为没有人邀请我...... 谢谢。那就是说,我开始研究它了。我来自ASP经典背景,所以有一些我还没有理解的东西。

如果有人可以指出我正确的方向,那将是伟大的。提前致谢。

所以,我正在以标准方式设置服务器。

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');

这给了我一个很好的页面 http://127.0.0.1:1337/。可爱。

我正在建设的网站位于 http://newsite.dev/。是不是可以(不要笑)设置节点服务器从我的站点的子文件夹运行,比方说 http://newsite.dev/api/

那么,可以发送来自客户端脚本的任何查询 /api/ 而不是 http://127.0.0.1:1337/

编辑: 使事情更清楚一些。我目前正在运行自定义PHP框架 http://newsite.dev/,但希望放弃这个长期。同时,需要并行运行它们。

编辑 再说一次,为了澄清,我正在运行OS X上的所有内容,所以安装了apache(MAMP)。


1050
2017-11-19 17:25


起源

我假设有一个不同的服务器(如Apache或nginx)运行 http://newsite.dev 已经?在这种情况下,使用子域可能更容易,比如 http://api.newsite.dev 节点应用程序正在运行的位置。 - Max K
@max更新以澄清。这是否意味着无法从子文件夹运行? - jamesmhaley
你是apache还是iis还是什么?这将有助于答案。 - Jason Sebring
@JasonSebring对不起,更新澄清! - jamesmhaley


答案:


您有很多选项,但它们都不允许您在与Apache + PHP相同的服务器上使用端口80作为Node应用程序而不进行代理。

您最好的两个选择如下:

1)设置一个新的子域 - 为node.newsite.dev创建一个新的DNS条目,并在另一台服务器上将该子域指向一个完全不同的IP(但从技术上讲,你可以在同一台服务器上设置两个IP,看到 这里),然后节点可以在其单独的服务器上的端口80上运行

2)让Apache在/path/to/apache/publicdir/newsite.dev上的端口80上运行,并在/path/to/node/application/newsite.dev上的端口1337上运行节点,然后你可以访问你的apache文件在 http://newsite.dev,以及您的节点应用程序 http://newsite.dev:1337

无论您做什么,都不要将您的节点应用程序放在Apache知道的子目录中,除非您想公开提供这些.js文件。

编辑回复您的编辑: 如果您的目标是专门转移到Node并最终关闭Apache + PHP,那么您最好的选择是使用子域。缺点是你必须在任何地方使用完全合格的链接。好处是,当您感觉应用程序位于节点中时,您可以进行查找/替换 (#//(www\.)?newsite.dev#, '//apache.newsite.dev') 和 (#//node.newsite.dev#, '//newsite.dev'),然后当你完全脱离Apache时,只需关闭它。


4
2017-11-19 20:58





您要求创建一个虚拟目录,是的,您可以使用PHP设置Node.js,但您必须做一些阅读。

虚拟目录是位于www.yourwebsite / myotherwebsite等文件夹中的网站

以下是如何在Apache中进行设置。

http://httpd.apache.org/docs/current/vhosts/examples.html

以下是如何在IIS中进行设置。

http://technet.microsoft.com/en-us/library/cc771804(v=ws.10).aspx

然后,您需要将Node.js与Apache或IIS连接起来。这里有更多说明。

Linux的: 如何使用node.js实现虚拟目录并表达?

视窗: http://www.hanselman.com/blog/InstallingAndRunningNodejsApplicationsWithinIISOnWindowsAreYouMad.aspx


5
2017-11-19 17:56





一次只能有一台服务器侦听端口。您不能在同一端口上安装Node.js和其他服务器。

最好的办法是为其他服务器设置不同的主机名。

如果您不能这样做,标准方法是将请求从一个服务器代理到另一个服务器。这样做相对容易,但是您没有指定正在运行的服务器,因此不可能更具体。


0
2017-11-19 17:59