I am trying to send a post request through PHP cURL to my node.js server to then emit a message to the client. The server is working and setup as follows:
var app = require('http').createServer(handler) , io = require('socket.io').listen(app) , fs = require('fs') , qs = require('querystring') app.listen(8000); function handler(req, res) { // set up some routes switch(req.url) { case '/push': if (req.method == 'POST') { console.log("[200] " + req.method + " to " + req.url); var fullBody = ''; req.on('data', function(chunk) { fullBody += chunk.toString(); if (fullBody.length > 1e6) { // FLOOD ATTACK OR FAULTY CLIENT, NUKE REQUEST req.connection.destroy(); } }); req.on('end', function() { // Send the notification! var json = qs.stringify(fullBody); console.log(json.message); io.sockets.emit('push', { message: json.message }); // empty 200 OK response for now res.writeHead(200, "OK", {'Content-Type': 'text/html'}); res.end(); }); } break; default: // Null }; }
and my PHP is as follows:
$curl = curl_init(); $data = array('message' => 'simple message!'); curl_setopt($curl, CURLOPT_URL, "http://localhost:8000/push"); curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_exec($curl);
The console says that json.message is undefined. Why is it undefined?
Advertisement
Answer
You’re using querystring.stringify() incorrectly. See the documentation on querystring’s methods here:
http://nodejs.org/docs/v0.4.12/api/querystring.html
I believe what you want is something like JSON.stringify() or querystring.parse(), as opposed to querystring.stringify() which is supposed to serialize an existing object into a query string; which is the opposite of what you are trying to do.
What you want is something that will convert your fullBody string into a JSON object.