A simple petstore with an API
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

127 lines
2.7 KiB

// Dependencies
var express = require("express");
var cors = require('cors')
var _ = require("underscore");
var bodyParser = require('body-parser');
var util = require('util');
// CORS Setup
var corsConfig = {
"origin": true,
"credentials": true
};
// ExpressJS Setup
var app = express();
app.use(cors(corsConfig)); // Handle CORS requests
var router = express.Router();
var port = 8080;
var pets = { "1": {"id":1,"name":"Eclair","tag":"cat"},
"2": {"id":2,"name":"Cannelle","tag":"cat"} };
var counter = 3;
// Handle CORS pre-flight request
app.options('*', cors(corsConfig));
// Log every request
router.use(function (req,res,next) {
next();
console.log("%s %s => %d", req.method, req.originalUrl, res.statusCode);
});
// Get all the pets
router.get("/pets",function(req,res){
success(res, 200, _.values(pets));
});
// Get a pet
router.get("/pets/:id",function(req,res){
var id = req.params.id;
if (! (id in pets)) {
return error(res, 404, util.format("No such pet with id '%s' !", id));
}
success(res, 200, pets[id]);
});
// Create a pet
router.post("/pets",function(req,res){
var pet = req.body;
if (pet == null) {
return error(res, 400, "No body sent !");
}
pet.id = counter++;
pets[pet.id] = pet;
success(res, 201, pet);
});
// Delete a pet
router.delete("/pets/:id",function(req,res){
var id = req.params.id;
if (! (id in pets)) {
return error(res, 404, util.format("No such pet with id '%s' !", id));
}
var pet = pets[id];
delete pets[id];
success(res, 200, pet);
});
// Update a pet
router.put("/pets/:id",function(req,res){
var pet = req.body;
if (pet == null) {
return error(res, 400, "No body sent !");
}
var id = req.params.id;
if (! (id in pets)) {
return error(res, 404, util.format("No such pet with id '%s' !", id));
}
if (pet.id != id) {
return error(res, 400, util.format("The id cannot be updated: '%s' vs '%s'", pet.id, id));
}
pets[id] = pet;
success(res, 200, pet);
});
//
// Please find below the plumbing code
//
// Register the JSON Parser for POST and PUT requests
app.use(bodyParser.json());
// Register the router
app.use("/",router);
// 404 Handler (Not Found)
app.use("*",function(req,res){
error(res, 404, "Not found");
});
// Start the HTTP Server
var server = app.listen(port,function(){
console.log("API Mockup listening at port %d", port);
});
function error(res, code, message) {
var response = {
status: code,
message: message
};
return res.status(code)
.type("application/json")
.send(JSON.stringify(response));
}
function success(res, code, response) {
return res.status(code)
.type("application/json")
.send(JSON.stringify(response));
}