/** * Using Rails-like standard naming convention for endpoints. * GET /things -> index * POST /things -> create * GET /things/:id -> show * PUT /things/:id -> update * DELETE /things/:id -> destroy */ 'use strict'; var _ = require('lodash'); var Thing = require('./thing.model'); // Get list of things exports.index = function(req, res) { Thing.find(function (err, things) { if(err) { return handleError(res, err); } return res.json(200, things); }); }; // Get a single thing exports.show = function(req, res) { Thing.findById(req.params.id, function (err, thing) { if(err) { return handleError(res, err); } if(!thing) { return res.send(404); } return res.json(thing); }); }; // Creates a new thing in the DB. exports.create = function(req, res) { Thing.create(req.body, function(err, thing) { if(err) { return handleError(res, err); } return res.json(201, thing); }); }; // Updates an existing thing in the DB. exports.update = function(req, res) { if(req.body._id) { delete req.body._id; } Thing.findById(req.params.id, function (err, thing) { if (err) { return handleError(res, err); } if(!thing) { return res.send(404); } var updated = _.merge(thing, req.body); updated.save(function (err) { if (err) { return handleError(res, err); } return res.json(200, thing); }); }); }; // Deletes a thing from the DB. exports.destroy = function(req, res) { Thing.findById(req.params.id, function (err, thing) { if(err) { return handleError(res, err); } if(!thing) { return res.send(404); } thing.remove(function(err) { if(err) { return handleError(res, err); } return res.send(204); }); }); }; function handleError(res, err) { return res.send(500, err); }