У меня есть следующая функция для связи между 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 или изначально в nodejs (который не кодируется url), поэтому лучше всего было бы решить проблему прямо на стороне php … Может ли кто-нибудь помочь мне Вот? Большое спасибо…
РЕДАКТИРОВАТЬ: в том числе парсинг стороны информационных узлов:
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); }); } } });
Что я понимаю, вы хотите отправить json-данные. Здесь я не видел никаких данных json. Я искал его. Здесь send-json-post-using-php , я нашел, как отправлять данные json в php. Надеюсь, это поможет.