Я следующая функция для обмена данными между 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 s полученные данные:
{ 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'));
}
, но это не удается, не outputing ничего если я правильно помню. Кроме того, функция, используемая далее для обработки данных, делится между тем, что исходит из php curl или изначально в nodejs (который не кодируется url), поэтому лучше всего было бы решить проблему прямо на стороне php ... Может кто-нибудь помогите мне здесь? Большое спасибо ...
EDIT: включая синтаксический анализ информации 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);
});
}
}
});
как вы анализируете полезную нагрузку 'POST' на стороне' nodejs'? –
@AlexAndrei извините, забыли включить это. См. Edit – Fane
см. Этот https://github.com/restify/node-restify/issues/220, в зависимости от того, какие 'formidable' принимает вы можете попытаться отправить непосредственно строку json в качестве полезной нагрузки' POST' –