title: cannot get PUT to work on Nodejs / express
body: <p>I've been writing my first node app, a rest api. I've got everything working pretty good but the PUT won't ever go through. I've tried lots of different combinations, lots of older tutorials and some new ones, and i'm probably pretty close I'm just not sure exactly how to update the record. Also, if you see anything that jumps out at you please feel free to let me know! I'm really liking node so I'd love to learn best practices.</p>
  
  <p>Below is the route to my table, all of the other endpoints are working fine. let me know if you have any questions.</p>
  
  <pre><code>//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('/');
  });
  
  
  }
  </code></pre>
  
  <p>My app.js</p>
  
  <pre><code>// 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);
  </code></pre>
  
  <p>lastly, the json error on put</p>
  
  <pre><code>{
   "name": "MongoError",
   "err": "Mod on _id not allowed",
   "code": 10148,
   "n": 0,
   "connectionId": 91,
   "ok": 1
  }
  </code></pre>