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:
data: JSON.stringify(viewProfiles)
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.
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
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'
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With