从PHP调用node.js脚本不会返回任何内容

我想做的事理论上很简单,但是我不能完全理解它的作用。

我编写了一个简单的node.js脚本,它使用request包asynchronous获取一些数据,parsing它,并将其吐出为html。 我想把这个脚本集成到我的客户端的php和基于apache的网站上,这个网站在共享的主机上,遇到了一些问题:

  1. 没有mod_proxy,所以我不能简单地通过Apache运行我的节点脚本作为服务器和代理
  2. 我不想在端口80上运行节点,并从节点代理到apache。 对于我需要做的事情来说,这只是太多的矫枉过正,会给我带来太多的麻烦。 已知我的特定共享主机在维护节点服务器实例方面遇到困难,而且我无法为此脚本运行潜在的停机时间辩护。
  3. 我尝试了node-cgi包,但是它对我不起作用。 我收到关于内部节点方法不存在的错误,我认为这个包只是过时了。

所以我登陆的是试图从PHP调用节点。 我的整个index.php文件是:

 <?php header("Content-Type: text/html"); exec("node beerlist.nd", $output); echo implode('', $output); 

当我在命令行上执行php index.php时,我得到了我期望的输出,但是当我尝试从浏览器访问这个输出时,我什么也没得到,即Content-Length: 0 。 为什么?

我想也许它与我的节点脚本的asynchronous本质有关,但似乎这个进程一直活着,直到它完成所有的asynchronous调用。 所以不应该我的PHP代码片段没有任何麻烦发送输出到浏览器? 我在这里错过了什么?

编辑:我的节点脚本的要点是

 var req = require('request') req("http://mywebsite.com", function(err, resp, body) { var output = // pull some interesting pieces out of the whole body console.log(output); }); 

我的outputvariables的生成不是这个问题的核心。 相关的部分是我使用request进行asynchronous调用,并使用console.log输出我的结果…也许这是一个问题?

我想Apache用户不知道什么node命令。 如果我是正确的尝试在PHP文件中写入:

 <full path to node> beerlist.nd 

代替

 node beerlist.nd 

为了得到完整的路径,运行在终端which node