Oxnigarth Oxnigarth - 4 months ago 21
JSON Question

Post jQuery JSON Object to NodeJs Restify

I want to know why it is so hard to post a simple JSON string in a

/:parameter
to restify. I have followed many examples but have not found anything concrete.

I have the following code in the front end.

$("#btnDoTest").click(function() {

var jData = {
hello: "world"
};
var request = $.ajax({
url: "http://localhost:8081/j/",
async: false,
type: "POST",
data: JSON.stringify(jData),
contentType: "application/javascript",
dataType: "json"
});


request.success(function(result) {

console.log(result);

});

request.fail(function(jqXHR, textStatus) {
alert("Request failed: " + textStatus);
});


});


I am succesful in sending simple text if I concatenate the param after the
j/
. But what I want to send is an object like this
{hello:"world"}
and reconstruct it back in nodeJS and work with it.

--Edit:

This is my nodejs file
/* the below function is from restifylib/response.js */
var restify = require("restify");

/* create the restify server */
var server = restify.createServer({

});


server.use(restify.bodyParser({ mapParams: true }));

server.use(
function crossOrigin(req,res,next){
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With");
return next();
}
);


server.post('/j/', function (req, res, next) {


//res.send(201,"REceived body: "+JSON.stringify(req.params));
res.send(201,"REceived body: "+JSON.stringify(req.params));
return next();
});


var port = 8081;
server.listen(port);
console.log("Server listening on port " +port)


Any help would be appreciated thanks.

0x

Answer

I finally got it working.

--Front end code

$("#btnDoTest").click(function() {



        var request = $.ajax({

            url: "http://localhost:3000/j",
            async: false,
            type: "POST",
            data: {
                blob: {wob:"1",job:"2", ar:[1,2,{a:'b'}]}
            },

            contentType: "application/x-www-form-urlencoded", //This is what made the difference.
            dataType: "json",

        });


        request.success(function(result) {

            console.log(result);

        });

        request.fail(function(jqXHR, textStatus) {
            alert("Request failed: " + textStatus);
        });


    });

NodeJs services

/* the below function is from restifylib/response.js */
var restify = require("restify");

/* create the restify server */
var server = restify.createServer({

});


server.use(restify.bodyParser());
server.use(restify.CORS());


server.post('/j/', function(req, res, next) {

    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "X-Requested-With");

    // req.params  == data on jquery ajax request.


    res.send(200, JSON.stringify(req.params));
    console.log(req.params.blob.ar[2].a)



    res.end();
    return next();
});


var port = 3000;
server.listen(port);
console.log("Server listening on port " + port)