Appel du script node.js de PHP ne renvoie rien

Ce que je veux faire est simple en théorie, mais je ne peux pas le faire fonctionner.

J'ai écrit un simple script node.js qui utilise le paquet de request pour récupérer de façon asynchrone certaines données, l'analyser et le cracher en tant que HTML. Je voulais intégrer ce script dans le site Web basé sur php et apache de mon client, qui se trouve sur un hôte partagé, et a couru dans quelques contournements:

  1. Il n'y a pas de mod_proxy, donc je ne peux pas simplement exécuter mon script de noeud en tant que serveur et proxy via Apache
  2. Je ne veux pas exécuter le noeud sur le port 80 et le proxy pour apache depuis le noeud. C'est trop trop pour ce que je dois faire, et j'aimerais faire trop de maux de tête pour moi. Mon hôte partagé particulier est connu pour avoir du mal à maintenir les instances du serveur de noeud, et je ne peux pas justifier le temps d'arrêt potentiel juste pour que ce script s'exécute.
  3. J'ai essayé le paquet node-cgi , mais cela n'a pas fonctionné pour moi. J'ai eu des erreurs sur les méthodes de nœud interne qui n'existaient pas, je pense que ce paquet est juste obsolète.

Alors, ce que j'ai attiré est d'essayer d'appeler simplement le noeud de PHP. Tout mon fichier index.php est:

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

Lorsque j'exécute php index.php sur la ligne de commande, j'obtiens mes résultats attendus, cependant, lorsque j'essaie d'accéder à cela à partir du navigateur, je n'obtiens rien, c'est Content-Length: 0 dire Content-Length: 0 . Pourquoi?

Je pensais peut-être qu'il s'agissait de la nature asynchique de mon script de noeud, mais il semble que le processus reste en vie jusqu'à ce qu'il finisse tous les appels asynchrones. Donc, mon extrait php ne devrait-il pas envoyer la sortie au navigateur sans problème? Qu'est-ce que j'oublie ici?

Modifier: Ce script essentiel de mon noeud est

 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); }); 

La génération de ma variable de output n'est pas au centre du problème ici. Les parties pertinentes sont que j'utilise la request pour faire un appel asynchrone et j'utilise console.log pour afficher mes résultats … peut-être que c'est un problème?

Je suppose que l'utilisateur d'Apache ne sait pas quelle commande de node est. Si j'ai raison, essayez d'écrire dans le fichier php:

 <full path to node> beerlist.nd 

au lieu de

 node beerlist.nd 

Pour obtenir le chemin d'accès complet vers le nœud dans le terminal, which node