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

所以我对Node.js聚会很晚了。 主要是因为没有人邀请我… 谢谢 。 这就是说,我正在开始工作。 我来自一个ASP经典的背景,所以有一些我还没有明白的东西。

如果有人能指引我正确的方向,那就太好了。 提前致谢。

所以,我正在build立一个服务器的标准方式。

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/ 。 可爱。

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

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

编辑:使事情更清楚一点。 我目前正在http://newsite.dev/运行一个自定义的PHP框架,但是期待这个长期下去。 同时,需要并行运行它们。

编辑再次,澄清,我在我的OS X上运行的一切,所以Apache(MAMP)的安装。

       

网上收集的解决方案 "Node.js服务器从一个子文件夹运行"

你有很多的select,但是没有一个可以让你在没有代理的情况下在Apache + PHP所在的同一台服务器上为你的Node应用程序使用端口80。

您的两个最佳select如下:

1)build立一个新的子域 – 为node.newsite.dev创build一个新的DNS条目,并在不同的服务器上将该子域指向一个完全不同的IP(尽pipe在技术上可以在同一台服务器上设置两个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文件。

编辑回应你的编辑:如果你的目标是独家转移到节点,并最终closuresApache + PHP,那么你最好的select是使用子域名。 不利的一面是,你必须在任何地方使用完全合格的链接。 好处是,当你觉得你的应用程序在节点上足够的时候,你可以做一个查找/replace(#//(www\.)?newsite.dev#, '//apache.newsite.dev')(#//node.newsite.dev#, '//newsite.dev') ,然后当你完全(#//node.newsite.dev#, '//newsite.dev') Apache的时候,closures它。

你要求创build一个虚拟目录,是的,你可以用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

然后,您需要使用Apache或IIS连接Node.js。 这是更多的指示。

Linux: 我如何用node.js实现虚拟目录并expression?

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

一次只有一台服务器可以监听端口。 你不能在同一个端口上有Node.js和其他服务器。

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

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