2015-12-01 3 views
2

Я следующая функция для обмена данными между 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);     
      }); 
     } 
    } 

}); 
+0

как вы анализируете полезную нагрузку 'POST' на стороне' nodejs'? –

+0

@AlexAndrei извините, забыли включить это. См. Edit – Fane

+0

см. Этот https://github.com/restify/node-restify/issues/220, в зависимости от того, какие 'formidable' принимает вы можете попытаться отправить непосредственно строку json в качестве полезной нагрузки' POST' –

ответ

0

Что я понимаю, вы хотите, чтобы отправить данные в формате JSON. Здесь я не видел никаких данных json. Я искал его. Здесь send-json-post-using-php, я нашел, как отправить данные json в php. Надеюсь, это поможет.

Смежные вопросы