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:
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