Php 不创建服务器就可以在NodeJS中获取POST数据吗?

Php 不创建服务器就可以在NodeJS中获取POST数据吗?,php,node.js,http,http-post,Php,Node.js,Http,Http Post,我想用NodeJS文件替换当前处理从我的网页(仅局域网)接收和处理数据的PHP脚本。目前,JSON数据正在JS中通过XMLHttpRequest发送: var xhttp=new-XMLHttpRequest(); var url=“/server.php”; xhttp.open(“POST”,url,true); setRequestHeader(“内容类型”、“应用程序/json”); xhttp.onreadystatechange=函数(){ ... }; xhttp.send(内容)

我想用NodeJS文件替换当前处理从我的网页(仅局域网)接收和处理数据的PHP脚本。目前,JSON数据正在JS中通过XMLHttpRequest发送:

var xhttp=new-XMLHttpRequest();
var url=“/server.php”;
xhttp.open(“POST”,url,true);
setRequestHeader(“内容类型”、“应用程序/json”);
xhttp.onreadystatechange=函数(){
...
};
xhttp.send(内容);
显然,server.php是我要替换的文件。在该文件中,我收到如下数据:

$stringHttp=file\u get\u contents('php://input");
关于如何在NodeJS中执行类似操作,我已经进行了广泛的搜索,但我发现的所有内容都使用以下基本布局:

http.createServer((请求、响应)=>{
...
}).听(8091);
现在,由于我的网页由Apache托管,因此可能无法在同一端口上创建此服务器。至少,这是我在尝试运行NodeJS文件时收到的错误消息:

events.js:183
      throw er; // Unhandled 'error' event
      ^

Error: listen EADDRINUSE :::8091
    at Object._errnoException (util.js:992:11)
    at _exceptionWithHostPort (util.js:1014:20)
    at Server.setupListenHandle [as _listen2] (net.js:1355:14)
    at listenInCluster (net.js:1396:12)
    at Server.listen (net.js:1480:7)
    at Object.<anonymous> (/var/www/apache/testNode.js:15:4)
    at Module._compile (module.js:652:30)
    at Object.Module._extensions..js (module.js:663:10)
    at Module.load (module.js:565:32)
    at tryModuleLoad (module.js:505:12)
events.js:183
投掷者;//未处理的“错误”事件
^
错误:侦听EADDRINUSE::8091
at Object.\u errnoException(util.js:992:11)
at_例外WithHostPort(util.js:1014:20)
在Server.setupListenHandle[as _listen2](net.js:1355:14)
在ListeniCluster(net.js:1396:12)
在Server.listen(net.js:1480:7)
反对。(/var/www/apache/testNode.js:15:4)
编译(Module.js:652:30)
在Object.Module.\u extensions..js(Module.js:663:10)
在Module.load(Module.js:565:32)
在tryModuleLoad时(module.js:505:12)
所以基本上,我正在寻找一个NodeJS替换
file\u get\u内容(“php://input)
。 因此,我的问题是:您能在不创建服务器的情况下在NodeJS中获取POST数据吗?

不,它不是

在PHP版本中,您有一个服务器。它是Apache,它使用(例如)mod_php来执行php

如果使用Node.js执行程序,则需要某种方法来获取对程序的HTTP请求。这涉及到运行服务器

可能无法在同一端口上创建此服务器

不,你需要在另一个端口上运行它。(然后直接发布到它,或者配置Apache作为它前面的代理)。

不,它不是

在PHP版本中,您有一个服务器。它是Apache,它使用(例如)mod_php来执行php

如果使用Node.js执行程序,则需要某种方法来获取对程序的HTTP请求。这涉及到运行服务器

可能无法在同一端口上创建此服务器


不,你需要在另一个端口上运行它。(然后直接发布到它,或者配置Apache作为它前面的代理)。

好吧,如果你真的只想运行一个node.js脚本并得到一个结果,那么你可以保留一个PHP脚本的shell,让它运行node和你的脚本。您可以在命令行上向节点脚本传递所需的数据,也可以在stdio中发送数据,节点脚本将从任何一个节点获取数据

您的节点脚本将运行并创建所需的结果,然后将其写入stdout。PHP脚本随后将获取标准输出数据并将其作为http响应转发

没有人会说这是一种超优的做事方式。HTTP响应被发送到Apache,然后启动PHP interpeter以运行PHP脚本,该脚本启动node.js以运行node.js脚本。但是,如果这是一个一次性的东西,只用于这一次使用,并且有一些令人信服的原因,您在其他地方使用PHP,并且需要node.js来完成这一点,那么您可以让它工作

甚至可以为这个脚本创建一个定制路径,Apache可以配置为检测并直接运行您的节点脚本(就像PHP一样),而无需PHP中间人。我对Apache不太了解,无法确切地建议如何做到这一点,但有很多方法可以帮助我做到这一点。同样,这不是最优的,但可以让它发挥作用



最好的性能解决方案是在另一个端口上实际创建node.js服务器,并让Apache或其他代理检测某些请求(通常基于路径),这些请求需要重定向到node.js服务器,而不是通过PHP发送或从客户端直接发送到另一个端口(您必须在node.js服务器中启用CORS才能使其工作)

您的节点脚本将运行并创建所需的结果,并将其写入stdout。然后PHP脚本将获取stdout数据并将其作为http响应转发

没有人会说这是一种超级优化的方式。HTTP响应被发送到Apache,然后启动PHP interpeter来运行PHP脚本,然后启动node.js来运行node.js脚本。但是,如果这只是一次使用,并且有一些令人信服的原因,您在其他地方使用PHP,并且需要node.js来运行此脚本这是一件事,然后你可以让它工作

甚至可以为这个脚本创建一个定制路径,Apache可以配置为检测并直接运行您的节点脚本(就像它对PHP所做的那样)没有PHP中间人。我对Apache不太了解,不知道该如何做,但有很多方法可以做到。同样,这不是最优的,但可以让它工作


最好的性能解决方案是在另一个端口上实际创建一个node.js服务器,并让Apache或其他代理检测某些请求(通常基于路径)