I am writing my first node application, a holiday api application. Everything works fine for me, but PUT will never pass. I tried many different combinations, a lot of old tutorials and some new ones, and I'm probably pretty close. I'm just not sure how to update the record. Also, if you see anything that pops up on you, feel free to let me know! I really like node, so I would like to learn the best practices.
Below is the route to my table, all other endpoints are working fine. let me know if you have any questions.
//Database var mongoose = require("mongoose"); mongoose.connect('mongodb://Shans-MacBook-Pro.local/lantern/'); // Schema var Schema = mongoose.Schema; var Person = new Schema({ first_name: String, last_name: String, address: { unit: Number, address: String, zipcode: String, city: String, region: String, country: String }, image: String, job_title: String, created_at: { type: Date, default: Date.now }, active_until: { type: Date, default: null }, hourly_wage: Number, store_id: Number, employee_number: Number }); var PersonModel = mongoose.model('Person', Person); // Return all people exports.allPeople = function(req, res){ return PersonModel.find(function (err, person) { if (!err) { return res.send(person); } else { return res.send(err); } }); } // Create A Person exports.createPerson = function(req, res){ var person = new PersonModel({ first_name: req.body.first_name, last_name: req.body.last_name, address: { unit: req.body.address.unit, address: req.body.address.address, zipcode: req.body.address.zipcode, city: req.body.address.city, region: req.body.address.region, country: req.body.address.country }, image: req.body.image, job_title: req.body.job_title, hourly_wage: req.body.hourly_wage, store_id: req.body.location, employee_number: req.body.employee_number }); person.save(function (err) { if (!err) { return console.log("created"); } else { return res.send(err); } }); return res.send(person); } // Return person by id exports.personById = function (req, res){ return PersonModel.findById(req.params.id, function (err, person) { if (!err) { return res.send(person); } else { return res.send(err); } }); } // Delete a person by id exports.deletePerson = function (req, res){ return PersonModel.findById(req.params.id, function (err, person) { return person.remove(function (err) { if (!err) { console.log("removed"); } else { return res.send(err); } }); }); } // Update a person by id exports.updatePerson = function(req, res){ var person = new PersonModel({ first_name: req.body.first_name }); var upsertData = person.toObject(); console.log(req.params.id); // OK delete upsertData.id; person.update({ _id: req.params.id }, upsertData, { multi: false }, function(err) { if(err) { throw err; } console.log('updated visit: '+ req.params.id); res.redirect('/'); }); }
My app.js
// Node Modules var express = require('express'); var app = express(); app.port = 3000; // Routes var people = require('./routes/people'); // Node Configure app.configure(function(){ app.use(express.bodyParser()); app.use(app.router); }); // Start the server on port 3000 app.listen(app.port); /********* ENDPOINTS *********/ // People app.get('/people', people.allPeople); // Return all people app.get('/people/:id', people.personById); // Return person by id app.post('/people', people.createPerson); // Create A Person app.put('/people/:id', people.updatePerson); // Update a person by id, not working app.delete('/people/:id', people.deletePerson); // Delete a person by id // Logs // - Build some logs here for info when the server is going. // - routes that are loaded, any activity that might be helpful console.log('Server started on port ' + app.port);
Finally, json error on put
{ "name": "MongoError", "err": "Mod on _id not allowed", "code": 10148, "n": 0, "connectionId": 91, "ok": 1 }