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

时间:2013-11-19 17:25:23

标签: javascript 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/

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

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

3 个答案:

答案 0 :(得分:6)

您有很多选项,但是没有一个选项允许您在没有代理的情况下在与Apache + PHP相同的服务器上为您的Node应用程序使用端口80。

您的两个最佳选择如下:

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

2)在/path/to/apache/publicdir/newsite.dev上的端口80上运行Apache,并在/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时,只需将其关闭即可。

答案 1 :(得分:5)

你要求创建一个虚拟目录,是的,你可以用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:How can I implement virtual directories with node.js and express?

Windows:http://www.hanselman.com/blog/InstallingAndRunningNodejsApplicationsWithinIISOnWindowsAreYouMad.aspx

答案 2 :(得分:0)

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

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

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