Melbourne2991
Melbourne2991

Reputation: 11797

ExpressJS POST not submitting data, using mongoose

I am building my first express.js application and I have run into my first hurdle.

I have a very simple set up.

routes in app.js:

app.get('/', routes.index);
app.get('/users', user.list);
app.get('/products', product.all);
app.post('/products', product.create);

route(controller) in routes/product.js

var Product = require('../models/product.js');

exports.create = function(req, res) {
    new Product({ name: req.query.name, description: req.query.description }).save();
};

exports.all = function(req, res) {
    Product.find(function(err, threads) {
        if (err) {
            res.send('There was an error: ' + err)
        }
        else {
            res.send(threads)       
        }
    });
}

Product model in models/product.js

var mongoose = require('mongoose'), 
    Schema   = mongoose.Schema,
    ObjectId = Schema.ObjectId;

var productSchema = new Schema({
    name: String,
    description: String
});

module.exports = mongoose.model('Product', productSchema);

I have tried sending post requests with both Postman (chrome extension) as well as Curl. I have noticed that both seem to hang after sending the request, as if waiting for a response, i'm no http expert but I assumed a post would not have a response? But perhaps it responds with whether it was successful or not?

my sample requests: http://0.0.0.0:3000/products?name=Cool, http://0.0.0.0:3000/products?name=Cool%Product&description=Allo%there%Soldier!

After sending the post and then sending a get request to http://0.0.0.0:3000/products I get an array of objects like so:

    {
        "_id": "52e8fe40b2b3976033ae1095",
        "__v": 0
    },
    {
        "_id": "52e8fe81b2b3976033ae1096",
        "__v": 0
    },

These are equal to the number of post requests I have sent, indicating to me that the server is receiving the post and creating the document/file, but not actually passing the parameters in.

Some help here would be excellent!

EDIT: It seems the code above is fine, I think I may have forgotten to restart my node server after having made some changes (Doh!), the restart fixed the issue

Upvotes: 0

Views: 646

Answers (2)

GuillaumeA
GuillaumeA

Reputation: 3545

Your post needs a response. You could do something like

var newProduct = new Product({ name: req.query.name, description: req.query.description });
newProduct.save(function(err, entry) {
  if(err) {
    console.log(err);
    res.send(500, { error: err.toString()});
  } 
  else {
    console.log('New product has been posted.');        
    res.send(JSON.stringify(entry));
  }
});

Upvotes: 0

hereandnow78
hereandnow78

Reputation: 14434

there is something like an http-request lifecycle, and of course an post has a response.

probably something like a 200 if your insert worked and a 404 if not!

you need to send a response in your create method:

exports.create = function(req, res) {
  new Product({ name: req.query.name, description: req.query.description }).save();
  res.send('saved');
};

Upvotes: 1

Related Questions