我有以下函数在php和nodejs之间进行通信:
function toNode($data){
//$data is array
//$data example
//$data = array("one"=>"yes","two"=>"no","three"=>array("yet"=>"another"))
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://127.0.0.1:'.$socket_port.'/posts');
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
curl_exec($ch);
$feedback = curl_getinfo($ch);
}
以下是nodejs console.log 收到数据的方式:
{ one: 'yes',
two: 'no',
'three[0][yet][0]':'another'} //<---
这里是我希望数据在nodejs方面显示:
{ one: 'yes',
two: 'no',
three: [ { yet: 'another' } ] } //<---
我怎么能用卷曲来实现这个目标?我已尝试在收到的信息nodejs端使用此功能
function urldecode(str) {
return decodeURIComponent((str+'').replace(/\+/g, '%20'));
}
但它失败了,什么也没输出如果我没记错的话。另外,进一步处理数据的函数在php curl或本地node js(不是url编码)之间共享所以,最好是在php端解决问题......有人可以帮助我吗?非常感谢你......
编辑:包括解析信息nodejs方:
app.post('/posts', function(req, res){
if(req.headers.host == '127.0.0.1:'+socket_port) {
if(req.method == 'POST') {
var form = new formidable.IncomingForm();
form.parse(req, function(err, fields, files) {
res.writeHead(200, [[ "Content-Type", "text/plain"]
, ["Content-Length", 0]
]);
res.write('');
res.end();
furtherFunction(fields);
});
}
}
});
答案 0 :(得分:0)
据我所知,你想要发送json数据。我这里没有看到任何json数据。我瞪了它。在这里send-json-post-using-php,我发现了如何在php中发送json数据。希望它会有所帮助。