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

时间:2014-02-22 18:56:44

标签: javascript php node.js apache

我想要做的事情在理论上很简单,但我无法让它发挥作用。

我写了一个简单的node.js脚本,该脚本使用request包来异步获取一些数据,解析它并将其作为html吐出。我想将这个脚本集成到我的客户端基于php和apache的网站上,该网站位于共享主机上,并遇到了一些障碍:

  1. 没有mod_proxy,所以我不能简单地通过Apache运行我的节点脚本作为服务器和代理
  2. 我不想在端口80上运行节点并从节点代理到apache。对于我需要做的事情来说,这太过分了,并且会给我带来太多麻烦。我知道我的特定共享主机无法保持节点服务器实例,并且我无法证明只有这个脚本才能运行的潜在停机时间。
  3. 我尝试了node-cgi包,但它对我不起作用。我收到有关内部节点方法不存在的错误,我认为这个包已经过时了。
  4. 所以我已经着手试图简单地从PHP调用节点。我的整个index.php文件是:

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

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

    我想也许它与我的节点脚本的异步性质有关,但似乎该过程保持活着状态,直到它完成所有异步调用。那么我的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);
    });
    

    我的output变量的生成并不是此问题的核心。相关部分是我使用request进行异步调用并使用console.log输出结果......这可能是个问题吗?

1 个答案:

答案 0 :(得分:7)

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

<full path to node> beerlist.nd

而不是

node beerlist.nd

获取终端which node

中节点运行的完整路径