Javascript 从Node.js发布到PHP
我试图将Node.js应用程序中的一些数据发布到PHP脚本中。目前,我只是建立一个概念证明,但我无法将实际数据传递到PHP端。请求通过了,我得到了200,但是PHP认为$\u POST数组是空的 这是我的节点代码:Javascript 从Node.js发布到PHP,javascript,php,node.js,post,express,Javascript,Php,Node.js,Post,Express,我试图将Node.js应用程序中的一些数据发布到PHP脚本中。目前,我只是建立一个概念证明,但我无法将实际数据传递到PHP端。请求通过了,我得到了200,但是PHP认为$\u POST数组是空的 这是我的节点代码: // simple end point just for testing exports.testPost = function(request, response) { data = request.body.data; postToPHP(data);
// simple end point just for testing
exports.testPost = function(request, response) {
data = request.body.data;
postToPHP(data);
response.end(data);
}
function postToPHP (data) {
var http = require('http');
var options = {
host : 'localhost',
port : 8050,
path : '/machines/test/index.php',
method : 'POST',
headers : {
'Content-Type' : 'application/json',
'Content-Length' : Buffer.byteLength(data)
}
};
var buffer = "";
var reqPost = http.request(options, function(res) {
console.log("statusCode: ", res.statusCode);
res.on('data', function(d) {
console.info('POST Result:\n');
//process.stdout.write(d);
buffer = buffer+data;
console.info('\n\nPOST completed');
});
res.on('end', function() {
console.log(buffer);
});
});
console.log("before write: "+data);
reqPost.write(data);
reqPost.end();
}
同样,请求将其发送到localhost:8050/machines/test/index.php,但当我执行$u POST的var_转储时,它是一个空数组
[29-Jan-2014 21:12:44] array(0) {
}
我怀疑.write()方法有问题,但我不太清楚是什么原因。如果您对我遗漏的内容或错误的操作有任何意见,我们将不胜感激
*更新:
正如一些注释所指出的,使用file\u get\u内容('php://input'); 确实可以在PHP端获取数据,但我仍然希望能够直接访问$\u POST数组 由于您使用
Content-Type:application/json
发送数据,您需要读取原始输入,因为php不知道如何将json读入其全局变量(如_GET和_POST),除非您有一些php扩展插件可以这样做
您可以使用库将对象解析为名称-值对查询字符串,然后使用内容类型:application/x-www-form-urlencoded
传输该字符串,以便将数据解析为全局值
var data = {
var1:"something",
var2:"something else"
};
var querystring = require("querystring");
var qs = querystring.stringify(data);
var qslength = qs.length;
var options = {
hostname: "example.com",
port: 80,
path: "some.php",
method: 'POST',
headers:{
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': qslength
}
};
var buffer = "";
var req = http.request(options, function(res) {
res.on('data', function (chunk) {
buffer+=chunk;
});
res.on('end', function() {
console.log(buffer);
});
});
req.write(qs);
req.end();
可能是@Quentin的复制品不,绝对不是。我尝试过将非JSON传递给PHP,但它仍然是一个空的$\u POST数组。“非JSON”应用程序/x-www-form-urlencoded数据是否正确编码?您只向我们展示了不应该填充
$\u POST
@Quentin的代码为什么不填充$\u POST?我相信答案就是我正在寻找的答案。我也尝试了内置的查询字符串模块来创建一个正确编码的字符串,但是$\u POST仍然是空的。我错过了什么?(顺便说一句,感谢您的及时回复!)您需要从php读取原始输入:file\u get\u contents(“php://input");代码>如何调整此解决方案以处理传入数据,例如:“[{”name:“test1”,“value:“10”},{”name:“test2”,“value:“20”}]”?由于明显的原因,我无法让qs助手将其字符串化。@NicholasKreidberg,如果您指的是来自php的数据JSON.parse(buffer)
,否则如果您指的是变量数据包含该字符串,则只需先将其解析为对象data={myArray:JSON.parse(data)}在将其传递给stringify并在php中捕获$\u POST['myArray']
之前,这非常有用!要使同一个示例在HTTPS上工作,需要什么?我最终使用了“请求”模块,并且在HTTPS上工作得很好。我仍然对如何使用本机模块感到好奇,但就目前而言,功能正是我所需要的。再次感谢!工作得很好,虽然在一个妥协的方式!