あいつの日誌β

働きながら旅しています。

demo api server

This is my memo.

var express = require("express");
var app = express();

app.use(express.logger());
app.use(express.bodyParser());
app.use(app.router);
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));

app.all('*', function (req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Credentials", true);
    res.header("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
    res.header("Access-Control-Allow-Headers", "X-Requested-With");
    res.header("Access-Control-Allow-Headers", "Content-Type");
    next();
});

var ids = {}, resources ={};

function getId(target) {
    if ( ids[target] ) {
        return ++ids[target];
    }
    else {
        return ids[target] = 1;
    }
}

function getResource(name) {
    if (resources[name]) {
        return resources[name];
    }
    else {
        return resources[name] = [];
    }
}

// list
app.get('/:resource', function (req, res) {
    var rows = getResource(req.params.resource);
    res.writeHead(200, { 'Content-Type': 'application/json' });
    res.write(JSON.stringify({success:true, root:rows}));
    res.end();
});

// create
app.post('/:resource', function (req, res) {
    var row = req.body;
    row.id = getId(req.params.resource);
    
    var rows = getResource(req.params.resource);
    rows.push(row);

    res.writeHead(200, { 'Content-Type': 'application/json' });
    res.write(JSON.stringify({success:true}));
    res.end();
});

// show
app.get('/:resource/:id', function (req, res) {
    var rows = getResource(req.params.resource);
  
    var row;
    for (var i = 0; i < rows.length; i ++) {
        if (rows[i].id == req.params.id ) {
           row = rows[i];
           break;
        } 
    }

    res.writeHead(200, { 'Content-Type': 'application/json' });
    res.write(JSON.stringify({success:true, root:row}));
    res.end();
});

// update
app.put('/:resource/:id', function (req, res) {
    var rows = getResource(req.params.resource);
  
    var row;
    for (var i = 0; i < rows.length; i ++) {
        if (rows[i].id == req.params.id ) {
           rows[i] = req.body;
           rows[i].id = req.params.id;
           break;
        } 
    }

    res.writeHead(200, { 'Content-Type': 'application/json' });
    res.write(JSON.stringify({success:true, root:row}));
    res.end();
});

// delete
app.delete('/:resource/:id', function (req, res) {
    var rows = getResource(req.params.resource);
  
    var row;
    for (var i = 0; i < rows.length; i ++) {
        if (rows[i].id == req.params.id ) {
           rows.splice(i, 1);
           break;
        } 
    }

    res.writeHead(200, { 'Content-Type': 'application/json' });
    res.write(JSON.stringify({success:true}));
    res.end();
});


var port = 4000;
app.listen(port);
console.log('express running at http://localhost:%d', port);