Runny Yolk
Runny Yolk

Reputation: 1164

Receiving Jquery POST data in Express

Edit See the accepted answer below for the fix. I also had to remove the line contentType: 'appliction/json', from my POST request.

I'm trying to send a string to Node.js / Express, but req.body is undefined server-side.

Client jQuery:

$.post({
        traditional: true,
        url: '/matches',
        contentType: 'appliction/json',
        data: viewedProfiles,
        dataType: 'json',
        success: function(response){

Express:

app.use(bodyParser.urlencoded({extended:true}));
app.use(bodyParser.json());

app.post('/matches', isLoggedIn, function(req, res){
  console.log(req.body) // this is undefined
  var loadedProfiles = []
  loadedProfiles.push(req.body.viewedProfiles)
  console.log('loadedProfiles')
  console.log(loadedProfiles)

I've tried:

I can see the XHR request in dev tools, and it contains the string I'm expecting.

What super obvious thing am I missing to send the data to Express?

Thanks.

Upvotes: 4

Views: 8067

Answers (2)

Arif Khan
Arif Khan

Reputation: 5069

Your server side code looks fine but you need to use $.ajax() rather than $.post() function because $.post() function send data into url (with url encoded). So your JQuery code would be

$.ajax({
        url: '/matches',
        type: 'POST',
        contentType: 'application/json',
        data: JSON.stringify({"viewedProfiles": viewedProfiles}),
        success: function(response){

I hope this will help you

Upvotes: 7

Kartal
Kartal

Reputation: 444

I've configured an exact same setup. And code below works:

var profiles = { 'data' : 'hello' };

$.post({
        traditional: true,
        url: '/matches',
        contentType: 'application/json',
        data: JSON.stringify( profiles ),
        dataType: 'json',
        success: function(response){ console.log( response ); }
} );

My nodejs engine:

app.use(bodyParser.urlencoded({extended:true}));
app.use(bodyParser.json());

app.post( '/matches' , function(req, res){
  console.log(req.body) // this outputs: { data: 'hello' }
} );

Btw, There is a typo where your contentType is, 'applicAtion/json'

Upvotes: 7

Related Questions