2017-09-30 3 views
0

Je construis un site web simple utilisant npm pour le développement, et il est hébergé chez un fournisseur avec un support php.Demande de piping Express.js au serveur intégré php sur localhost résultats dans ECONNREFUSED

La seule fonctionnalité qui utilise php est le formulaire de contact pour envoyer un courriel. le reste est simple html et javascript.

J'utilise un serveur simple php dans le développement a commencé avec php -S localhost:8000 pour tester un script php simple e-mail et de nouveau en dev je reverse proxy pour les demandes email.php à ce serveur php localement.

application Node est sur le port 3000 et le serveur php est sur le port 8000. Le problème est que je reçois connexion refusé erreur avec la configuration du serveur express suivant lorsque la demande passe par localhost: 3000/email.php:

#!/usr/bin/env node 

var express = require('express'); 
var app = express(), 
    request= require('request'), 
    port = +(process.env.PORT || 3000); 


app.set('case sensitive routing', false); 

app.post('/email.php', function(req, res){ 
    req.pipe(request({ 
    url: 'http://localhost:8000/email.php', 
    qs: req.query, 
    method: req.method 
    }, function(error){ 
    if (error.code === 'ECONNREFUSED'){ 
     console.error('Refused connection'); 
    } else { 
     throw error; 
    } 
    })).pipe(res); 
}); 


// other request handlers here 

app.listen(port, function() { 
    console.log('listening'); 
}); 

Le serveur PHP est définitivement opérationnel et sert toutes les pages sur le port 8000, que je peux parcourir avec le navigateur. Je l'ai testé avec curl et il semble gérer la requête très bien lorsqu'il est posté directement sur localhost: 8000 en utilisant curl.

Je ne sais pas pourquoi je reçois cette erreur, me grattant la tête, je ne vois pas pourquoi.

L'aide est très appréciée.

+0

Votre serveur express s'exécute-t-il sur le même serveur? –

Répondre

2

J'ai compris ce que c'était, d'oh! Eh bien, je vais poster la réponse au cas où quelqu'un d'autre trébucherait sur ce sujet.

PHP est à blâmer semble-t-il; Vérification des prises d'écoute d'un port en utilisant ss -ltn (Je suis sur Linux, cela pourrait ne pas fonctionner pour vous) J'ai réalisé que le serveur php écoute IPv6 seulement. sortie correspondante comme suit:

State  Recv-Q Send-Q            Local Address:Port                Peer Address:Port     
LISTEN  0  128               ::1:8000                  

Avec la recherche pertinente j'ai trouvé la réponse à la page de documentation du serveur Web dans les notes de l'utilisateur posté par un utilisateur. Voir l'article here. La solution consiste à utiliser 127.0.0.1 plutôt que localhost:

En fin de compte, si vous avez démarré le serveur php avec « php -S localhost: 80 » le serveur sera lancé avec le soutien ipv6 seulement!

Pour y accéder via ipv4, vous devez modifier la commande de démarrage comme ainsi: "php -S 127.0.0.1:80" qui démarre le serveur en mode ipv4 uniquement.