javascript - Express.js 对本地主机上的 php 内置服务器的管道请求导致 ECONNREFUSED

标签 javascript php node.js express reverse-proxy

我正在使用 npm 构建一个简单的网站进行开发,并且由支持 php 的提供商托管。

使用 php 的唯一功能是发送电子邮件的联系表单。剩下的就是简单的 html 和 javascript。

我在开发中使用一个简单的 php 服务器,从 php -S localhost:8000 开始测试一个简单的 php 电子邮件脚本,并在开发中再次反向代理对 email.php 的请求 code> 本地到此 php 服务器。

Node 应用程序位于端口 3000 上,php 服务器位于端口 8000 上。问题是,当请求通过 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');
});

Php 服务器肯定已启动并为端口 8000 上的所有页面提供服务,我可以使用浏览器浏览这些页面。我用curl测试它,当使用curl直接发布到localhost:8000时,它似乎可以很好地处理请求。

不知道为什么会出现这个错误,摸不着头脑,想不出任何原因。

非常感谢您的帮助。

最佳答案

我知道那是什么了,哦!好吧,我将发布答案,以防其他人偶然发现这一点。

看来 PHP 是罪魁祸首;使用 ss -ltn 检查监听端口的套接字(我在 Linux 上,这可能对你不起作用)我意识到 php 服务器只监听 IPv6。相关输出如下:

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

通过相关搜索,我在用户发布的用户注释下的网络服务器文档页面上找到了答案。见帖子here 。解决方案是使用 127.0.0.1 而不是 localhost:

As it turned out, if you started the php server with "php -S localhost:80" the server will be started with ipv6 support only!

To access it via ipv4, you need to change the start up command like so: "php -S 127.0.0.1:80" which starts server in ipv4 mode only.

关于javascript - Express.js 对本地主机上的 php 内置服务器的管道请求导致 ECONNREFUSED,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46502612/

相关文章:

javascript - 如何防止表单提交时刷新时重新提交表单

javascript - 使用连接角色的 Node.js 角色授权

php - 您的 SQL 语法有误 - 在第 1 行的 'WHERE userId = ' 附近使用语法 6''

php - 异常 : Handshake Failed(Android-studio, 联机数据库)

php - 我可以同时使用 $_POST 和 $_GET 吗?

node.js - 将 brunch 与 Node.js 模块结合使用

javascript - 使用 jQuery 测试输入是否有焦点

javascript - 推送值后未定义的数组

javascript - Ajax post-跨域请求XDR

javascript - 如何在 Cypress 中获取具有动态选择器的元素