javascript — запрос конвейера Express.js на встроенный сервер php на локальном хосте приводит к ECONNREFUSED

Я создаю простой сайт, использующий npm для разработки, и он размещается у провайдера с поддержкой php.

Единственный функционал, который использует php — это контактная форма для отправки электронной почты. остальное — это простые html и javascript.

Я использую простой PHP-сервер в разработке, начатой ​​с php -S localhost:8000 протестировать простой скрипт электронной почты php и снова в dev я обращаюсь запросы прокси для email.php на этот сервер php локально.

Приложение Node находится на порте 3000, а сервер php — на порте 8000. Проблема заключается в том, что я получаю сообщение об отказе в соединении со следующей конфигурацией экспресс-сервера, когда запрос проходит локальный: 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');
});

Php-сервер определенно работает и обслуживает все страницы порта 8000, которые я могу просматривать в браузере. Я проверяю это с локон и кажется, что он обрабатывает запрос очень хорошо, когда отправляется непосредственно на localhost: 8000 с помощью curl.

Не уверен, почему я получаю эту ошибку, почесывая голову, не могу придумать ни одной причины.

Помощь очень ценится.

0

Решение

Я понял, что это было, да! Ну, я выложу ответ, если кто-то еще наткнется на это.

В этом виноват PHP; Проверка сокетов прослушивания порта с помощью ss -ltn (Я на Linux, это может не сработать для вас) Я понял, что php-сервер прослушивает только IPv6. Соответствующий вывод следующим образом:

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

С соответствующим поиском я нашел ответ на странице документации веб-сервера под примечаниями пользователя, опубликованными пользователем. Смотрите пост Вот. Решение состоит в том, чтобы использовать 127.0.0.1 вместо localhost:

Как оказалось, если вы запустили сервер php с «php -S
localhost: 80 «сервер будет запущен только с поддержкой ipv6!

Чтобы получить к нему доступ через ipv4, вам нужно изменить команду запуска, например:
Итак: «php -S 127.0.0.1:80», который запускает сервер только в режиме ipv4.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector