Solomon Ayoola
Solomon Ayoola

Reputation: 2669

Req.body is empty on post and put request in Nodejs

The server file is

'use strict';

var express        = require('express');
var compression    = require('compression');
var configDB       = require('./config/database');
var mongoose       = require("mongoose");
var bodyParser     = require('body-parser');
var logger         = require('morgan');
var path           = require('path');
var app            = express();

var deliveries     = require('./routes/deliveries');

var mongoString;
if (process.env.MONGOLAB_URI) {
 console.log('Now in HEROKU');
 mongoString = process.env.MONGOLAB_URI;
} else {
 mongoString = configDB.dev;
 console.log('In dev mongo', mongoString);
}

mongoose.connect(mongoString);
mongoose.connection;

app.set('views', path.join(__dirname, '/views'));
app.set('view engine', 'ejs');
app.engine('html', require('ejs').renderFile);
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
 extended: true
}));
app.use(express.static(path.join(__dirname, 'public')));

app.use('/api/deliveries', deliveries);

var server = app.listen(3000, function() {
 var host = 'localhost';
 var port = server.address().port;
 console.log('Listening at http://%s:%s', host, port);
});

module.exports = app;

I don't know what is wrong with the server setup. Making a post and put request has been a pain. I have been battling with this for the past 1 hour. Any help to what I am doing wrong.

The route file is

router.put('/cancel/:id', function(req, res) {
 deliveries.cancel(req, res);
});

deliveriesControllerActions.cancelDelivery = function(req, res) {
  console.log(req.headers['content-type']);
  if (!(util.isEmpty(req.query))) {
   req.body = req.query;
  }

 var deliveryid = req.params.deliveryid;
 var userid = req.body.userid;
 var cancelStatus = {
  status: true,
  timestamp: Date.now()
 };

if (!util.verifyInputFields(userid, deliveryid)) {
  util.sendErrResponse(res, 404, 'userid is empty');
} else {
 Delivery.findById(deliveryid)
   .exec(function(err, deliveryObject) {
    if (deliveryObject) {
      if (deliveryObject.cancelled_by_sender.status || deliveryObject.cancelled_by_admin.status || deliveryObject.cancelled_by_receiver.status) {
        saveUpdatedDelivery(res, userid, deliveryObject);
      } else {
        deliveryObject.status = deliveryRequestCancelledStatus;
        deliveryObject.cancelled_by_admin = cancelStatus;
        saveUpdatedDelivery(res, userid, deliveryObject);
      }
    } else if (err) {
      util.sendErrResponse(res, 404, err);
    }
  });
 }

}

Upvotes: 1

Views: 2773

Answers (1)

mscdex
mscdex

Reputation: 106736

The problem is that you're not sending the appropriate type of data to the server. You're submitting something other than application/json or application/x-www-form-urlencoded (text/plain evidently). Either the data itself (and Content-Type) is not correct, or the Content-Type header needs to be set appropriately.

Upvotes: 2

Related Questions